Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Перебор компонентов


Автор: Burka 26.6.2007, 20:48
Дано: Около 200 компонент, в моем случае типа TLabel, с именем r1, r2, .. , r200 (например)
Как можно в цикле перечислить все эти компоненты, не создавая своих массивов. Вроде в делфи есть уже массивы компонент, как их использовать?

Автор: former 26.6.2007, 21:24
Можно так:

Код

procedure ClearLabels;
var  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TLabel) then
      (Components[i] as TLabel).Caption := '';
end;


Автор: Burka 26.6.2007, 21:33
Спасибо!

Автор: ilya198293 27.6.2007, 07:36
а как для компонента CheckBox как сделать присвоение Components[i].checked:=true - такой вариант не работает.

Автор: MetalFan 27.6.2007, 08:02
Цитата(ilya198293 @  27.6.2007,  08:36 Найти цитируемый пост)
а как для компонента CheckBox как сделать присвоение Components[i].checked:=true - такой вариант не работает. 

а по аналогии с
Цитата(former @  26.6.2007,  22:24 Найти цитируемый пост)
procedure ClearLabels;
var  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TLabel) then
      (Components[i] as TLabel).Caption := '';
end;

никак?

Код

var  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TCheckbox) then
      (Components[i] as TCheckbox).Checked := True;
end;

Автор: ilya198293 27.6.2007, 08:26
туплю...
читал через строчку
  if (Components[i] is TLabel) then
     ********************.Caption := '';

Автор: ilya198293 27.6.2007, 08:45
а можно перебирать не компоненты, а процедуры?

Код

  if ComboBox1.Text='12'
    then ComboBoxChange12;
  if ComboBox1.Text='11'
    then ComboBoxChange11;
  if ComboBox1.Text='10'
    then ComboBoxChange10;
  if ComboBox1.Text='9'
    then ComboBoxChange9;
  if ComboBox1.Text='8'
    then ComboBoxChange8;
  if ComboBox1.Text='7'
    then ComboBoxChange7;
  if ComboBox1.Text='6'
    then ComboBoxChange6;

Автор: MetalFan 27.6.2007, 15:37
жэсть. а зачем так? передавай в процедуру обработки содержимое ComboBox1.Text

Автор: ilya198293 28.6.2007, 15:13
а в какую процедуру из семи?
если их собрать все в одну, тогда внутри нужно будет ещё больше проверок делать для определения алгоритма расчёта...
просто я думал что можно описать аналогично  (Components[i] as TCheckbox).Checked := True; |для компонента класса TCheckbox свойству Checked присвоить значение True|
что-нибудь типа |запустить процедуру 'ComboBoxChange'+ComboBox1.Text|

Автор: Rennigth 28.6.2007, 16:31
бр...
Код

var
  lCombo: TComboBox;
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TComboBox) then
    begin
      lCombo := TComboBox(Components[i]);
      if Assigned(lCombo).OnChange) then
        lCombo.OnChange(lCombo);
    end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)