Советы по Delphi


Массив из CheckBox - использование разделяемого обработчика события I


Поместите несколько Checkbox в компонент TGroupBox. Во время прогона (или проектирования) назначьте общий обработчик события Click для всех checkbox'в. Чтобы в цикле обойти все "дочерние" TCheckBox'ы, можно воспользоваться свойством-массивом Controls TGroupBox (и заодно привести их к типу TCheckBox). Приблизительно так:

    for i := 0 to GroupBox1.ControlCount -1 do if (GroupBox1.Controls[i] as TCheckBox).checked then {что-то там еще};

Вы можете получить имя sender следующим образом:



    procedure TMain1.CheckBoxClick(Sender: TObject);
var
whodidit  : string[63];
begin
whodidit := TComponent(sender).name; end;

После приведения типа можно добраться и до других свойств. К примеру, очень полезным может оказаться свойство Tag. Во время создания, вы можете присвоить каждому checkbox.tag свой ID номер. А в обработчике события, читая ID, можно идентифицировать sender. [001476]


    var
CheckArray: array[1..x] of TCheckBox; i:integer; begin
for
i:=1 to x do begin CheckArray[i]:=TCheckBox.Create(Form1); {Устанавливаем свойства} with CheckBox[i] do begin Left:=i*20; Width:=15; другое... end; end;

Очевидно, можно сказать:

    Check[i].OnClick:=xyz.

Пока я и сам не знаю как поступить. Динамическое создание компонентов да, но обработчики событий?

Существует способ организации массива checkbox'ов с разделяемым обработчиком события. Расположите их на форме и дайте им "непрерывные" имена (Check1, Check2 и т.д.). Затем установите у них общий обработчик события. Обработчик события может выглядеть так:

    procedure TForm.Check1Click(Sender : TObject);
var i : Integer; begin for i := 1 to 10 { предположим, что мы имеем 10 checkbox'ов } do With TCheckBox(FindComponent('Check'+IntToStr(i))) do begin { другой какой-то код } end; end;

[001478]



Содержание раздела