Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Доступ к дочерним контролам в Delphi"

Delphi , Компоненты и Классы , Вкладки и Страницы

В статье мы рассмотрим, как получить доступ к дочерним контролам в Delphi и изменить их свойства, в частности, свойство Enabled для типа TEdit, находящегося внутри TGroupBox, которая, в свою очередь, находится на TTabSheet TPageControl.

Проблема

Пользователь хочет написать процедуру, которая будет отключать/включать TEdit, находящиеся внутри TGroupBox на определенной TTabSheet TPageControl. Эта процедура должна находиться в отдельном юните, чтобы ее можно было использовать в других формах. Однако, процедура не работает, несмотря на отсутствие ошибок.

Решение dseligo

Решение dseligo предлагает использовать свойство Controls вместо Components, чтобы получить доступ к дочерним контролам. Вот код:

procedure ApenasVisualizar(Frm: TForm; PageControlName: String; Ativo: Boolean);
var
  i, j, k, l: Integer;
  PageControl: TPageControl;
  TabSheet: TTabSheet;
  GroupBox: TGroupBox;
  Control: TControl;
begin
  PageControl := Frm.FindComponent(PageControlName) as TPageControl;
  if Assigned(PageControl) then
  begin
    for i := 0 to PageControl.PageCount - 1 do
    begin
      TabSheet := PageControl.Pages[i];
      for k := 0 to TabSheet.ControlCount - 1 do
      begin
        if TabSheet.Controls[k] is TGroupBox then
        begin
          GroupBox := TGroupBox(TabSheet.Controls[k]);
          for l := 0 to GroupBox.ControlCount - 1 do
          begin
            Control := GroupBox.Controls[l];
            if Control is TEdit then
            begin
              TEdit(Control).Enabled := not Ativo;
            end;
          end;
        end;
      end;
    end;
  end
  else
    raise Exception.CreateFmt('PageControl "%s" não encontrado no Form "%s".', [PageControlName, Frm.Name]);
end;

Альтернативное решение BrunoK

BrunoK предлагает альтернативное решение, которое использует рекурсивную функцию для поиска нужного PageControl и процедуру для изменения свойства Enabled для TEdit, находящихся внутри TGroupBox. Вот код:

procedure ApenasVisualizar(Frm: TForm1; PageControlName: String; Ativo: Boolean);
  function FindPageControl(aControl: TControl): TPageControl;
  begin
    for TPageControl(Result) in aControl.Components do
      if (Result is TPageControl) and (Result.Name = PageControlName) then
        exit(TPageControl(lControl))
      else
        FindPageControl(Result);
    Result := nil;
  end;
  procedure SetEditEnabled(aWinControl: TWinControl);
  var
    lWinControl: TWinControl;
  begin
    for TWinControl(lWinControl) in aWinControl.Controls do
      if lWinControl.InheritsFrom(TWinControl) then
        if (lWinControl is TEdit) and (lWinControl.Parent.InheritsFrom(TGroupBox)) then
          TEdit(lWinControl).Enabled := Ativo
        else
          SetEditEnabled(lWinControl);
  end;
 var
  PageControl: TPageControl;
begin
  PageControl := FindPageControl(Frm);
  if Assigned(PageControl) then
    SetEditEnabled(PageControl)
  else
    raise Exception.CreateFmt('PageControl "%s" não encontrado no Form "%s".',
      [PageControlName, Frm.Name]);
end;

Заключение

В этой статье мы рассмотрели, как получить доступ к дочерним контролам в Delphi и изменить их свойства. Мы рассмотрели два решения: одно от dseligo, которое использует свойство Controls вместо Components, и альтернативное решение от BrunoK, которое использует рекурсивную функцию для поиска нужного PageControl и процедуру для изменения свойства Enabled для TEdit, находящихся внутри TGroupBox. Оба решения решают проблему пользователя и могут быть использованы в других формах.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема доступа к дочерним контролам в Delphi и изменения их свойств, в частности, свойства Enabled для типа TEdit, находящегося внутри TGroupBox на TTabSheet TPageControl, с целью отключения/включения TEdit. Два предложенных реш


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Вкладки и Страницы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:17:58/0.0037431716918945/0