Элементы управления на форме можно рассматривать в целом как некоторый массив или коллекцию. При этом имеется возможность производить в цикле некоторые действия над некоторыми или всеми элементами.
Массив Controls является свойством некоторого котейнера-владельца других элементов управления. Число элементов управления для этого владельца равно Controls.Count.
Обычно используются следующие способы анализа элементов управления в цикле перебора массива Controls:
1. Путем задания для нужных элементов управления одинакового значения свайства Tag;
2. Путем приведения типа (приведение действует для тех элементов управления, которые являются потомками этого типа): (TEdit).Controls[i].Color
3. Определения типа элемента управленияif Controls[i] is TEdit
Приведенная программа демонстрирует все описанные способы
TForm1 = class(TForm) private Colored:boolean; // Раскрашенный или нет Created:boolean; // Созданы ли элементы управления Edits: Array[1..3] of TEdit; // Строки ввода Checks: Array[1..3] of TCheckBox; // Флажки////procedure TForm1.FormCreate(Sender: TObject);begin Created:=False; Colored:=False; Button1.Tag:=-1; Button2.Tag:=-1; Button3.Tag:=-1;// Свойства Tag устанавливаются для кнопок,// чтобы они не участвовали в заливке цветом// элементов управленияend;
procedure TForm1.Button1Click(Sender: TObject); var i:integer;begin if not(Created) then begin for i:=1 to 3 do begin Edits[i]:=TEdit.Create(Self); Edits[i].Left:=10; Edits[i].Top:=Edits[i].Height+20*i; Edits[i].Width:=50; Edits[i].Parent:=Self; Checks[i]:=TCheckBox.Create(Self); Checks[i].Left:=30+Edits[i].Width; Checks[i].Top:=Edits[i].Top; Checks[i].Parent:=Self; end; Created:=True; end;end;
procedure TForm1.Button2Click(Sender: TObject); var i:integer;begin for i:=0 to Self.ControlCount-1 do if Self.Controls[i].Tag <> -1 then // 1-й способ определения нужных/ненужных контролов if Colored then TEdit(Self.Controls[i]).Color:= clWindow // свойство Color есть у Edit и Check, else // поэтому можно все приводить к TEdit TEdit(Self.Controls[i]).Color:= clYellow;Colored:=not(Colored);end;
procedure TForm1.Button3Click(Sender: TObject); var i:integer;beginfor i:=0 to Self.ControlCount-1 do if Self.Controls[i] is TEdit Then // 2-й способ выбора нужных контролов TEdit(Self.Controls[i]).Text:=IntToStr(i);end;