|
Платные хостинги
Раскрутка сайта
Книги по программированию
Как перебрать контролы..., ... на форме или в панели..
- Вопрос такой, есть у меня, к примеру, 10 чекбоксов, мне нужно в цыкле их обработать и проставить, или не проставить свойство чекед. Дык как можно к ним обратиться не по именам а по индексу. В С++ помню, там есть коллекции, через которые можно по индексу добраться до любого контрола, а вот как в Дельфи?
- Перебор всех компонентов на форме:Код var i:integer;begin For i:=0 to ComponentCount-1 do if Components[i] is TCheckBox then (Components[i] as TCheckBox).Checked:=true;end;highlightSyntax('delphiNkMmIw','delphi');Обратится к компоненту по имени можно например так, если стоит 10 CheckBox - от CheckBox1 до CheckBox10 тоКод For i:=1 to 10 do (FindComponent(Format('CheckBox%d',[i])) as TCheckBox).checked:=true;highlightSyntax('delphiFkOGQyN','delphi');
- И еще, если например эти 10 CheckBox все время используются для групповых операций, чтобы не перебирать компоненты можно сделать так.1) Берем ставим на форму 10 CheckBox2) объявляем массивvar arr:array[1..10] of TCheckBox3) Далее присваиваем поинтеры массиву:Код For i:=1 to 10 do arr[i]:=FindComponent(Format('CheckBox%d',[i])) as TCheckBox;highlightSyntax('delphiyYWQ4Y','delphi');Все, теперь к каждому CheckBox можно обратится как к элементу массива: arr[5].checked:=true;Так как здесь массив статический никаких действий по освобождению памяти делать не надо, по уничтожении компонентов деструктором формы элементы массива будут показывать вникуда. В любом случае этот массив занимает в памяти 40 байт - не большая плата за скорость и удобство.
- Второе решение лучше. Вот только жаль что нет какого-нить специального инструмента. Я пробовал добираться через свойство Controls, которое есть у группирующих компонентов:Код procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);var I: Integer; ChildControl: TControl;begin for I:= 0 to GroupBox1.ControlCount -1 do begin ChildControl := GroupBox1.Controls[I]; ChildControl.Top := ChildControl.Top + 15 end;end;highlightSyntax('delphiYTI4MT','delphi');но потом не смог понять как однозначно идентифицировать контрол, да и добраться так можно только до свойств базового класса TControl.может можно сделать что-то такое?Код ...(ChildControl.ClassType as TCheckbox).Checked:=True;...highlightSyntax('delphiODkzNTl','delphi');
- Да, сначала можешь проверить тип контрола оператором is:Код if edit1 is TEdit then....highlightSyntax('delphiJjZDA1','delphi');Затем доступ ко всем свойствам путем приведения класса:Код (edit1 as TEdit).text:=''; highlightSyntax('delphi4NjI1Yj','delphi');
Интернет казино
Онлайн игры
Увеличение члена
Купить DVD
|