Вопрос по синтаксису?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Как можно создать прямо в процедуре, так чтобы:
ComboBox(N)
Где N целочисленная переменная?
ComboBox(N)
Где N целочисленная переменная?
Не понятен вопрос, создать много ComboBox'ов, что-ли, а потом обращаться к ним, как к массиву?
It's a long way to the top if you wanna rock'n'roll
somewhere,
Нужно создавать комбо боксы, чтобы они отличались по именам, но неизвестно сколько их. Т.е. их в массиве нужно хранить?
Нужно создавать комбо боксы, чтобы они отличались по именам, но неизвестно сколько их. Т.е. их в массиве нужно хранить?
Боксы все-равно будут на форме (наверное), поэтому каждому боксу в поле Tag можно задать его номер, а обращаться можно через Form.Controls. Берешь контрол, если это комбос, то проверяешь его Tag, а там дальше танцуешь. Для удобства можно использовать панель на форме, и также Panel.Controls
It's a long way to the top if you wanna rock'n'roll
somewhere,
Немного не понял Form.Controls.Tag я задаю какой-то и дальше продолжаю работать с этим самым Комбобоксом?
т.е.
Form.Controls.Tag := 1; Первый комбобокс
Как к ним потом обращаться к конкретным?
Немного не понял Form.Controls.Tag я задаю какой-то и дальше продолжаю работать с этим самым Комбобоксом?
т.е.
Form.Controls.Tag := 1; Первый комбобокс
Как к ним потом обращаться к конкретным?
For I := 1 to 10 do
begin
MyCombo := TComboBox.Create(MyForm);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
end;
For I:=1 to MyForm.ControlCount do
begin
If (MyForm.Controls.ClassNameIs('TComboBox')) and (MyForm.Controls.Tag = 7) then
begin
.........
.........
end;
end;
begin
MyCombo := TComboBox.Create(MyForm);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
end;
For I:=1 to MyForm.ControlCount do
begin
If (MyForm.Controls.ClassNameIs('TComboBox')) and (MyForm.Controls.Tag = 7) then
begin
.........
.........
end;
end;
It's a long way to the top if you wanna rock'n'roll
somewhere,
Гм, все равно не получается.
Согдал ListBox с Tag := 1.
Главная форма Form1, пробую:
Form1.Controls[1].Items.Add('Не получается');
Что-то я невъехал совсем
тут автор получается указывает, что это чекбокс. Но у него есть форма на которой PanelTest и в нем чекбоксы... Вот тут вся и проблема- непонимаю как мне бращаться с такой структурой. Постоянно выдает ошибку как не пробовал..
Гм, все равно не получается.
Согдал ListBox с Tag := 1.
Главная форма Form1, пробую:
Form1.Controls[1].Items.Add('Не получается');
Что-то я невъехал совсем

У меня получается есть PageControl1, все происходит на 1 закладке. На которой еще есть GroupBox2 вот с этим непонимаю. Нашел такой пример:Для удобства можно использовать панель на форме, и также Panel.Controls
TCheckBox(PanelTest.Controls).Checked:=True
тут автор получается указывает, что это чекбокс. Но у него есть форма на которой PanelTest и в нем чекбоксы... Вот тут вся и проблема- непонимаю как мне бращаться с такой структурой. Постоянно выдает ошибку как не пробовал..
Controls содержит динамический массив из объектов типа TControl.
TComboBox - наследник TControl, т.е. включает все его свойства и методы
ControlCount - это сколько всего объектов в Controls, я ошибся в тексте, т.к. отчет идет с нуля.
Чтобы прога поняла, что за контрол находиться в Controls, выполняеться указание на тип, т.е. :
Controls - тип TControl
TComboBox(Controls) - это уже TComboBox.
Вот листинг для примера, возьми пустую Form1 и повесь Button1 в любое место, посмотри как она работает:
procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
MyCombo : TComboBox;
begin
For I := 1 to 10 do
begin
MyCombo := TComboBox.Create(Form1);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
Form1.InsertControl(MyCombo);
end;
For I:=0 to Form1.ControlCount-1 do
begin
If (Form1.Controls.ClassNameIs('TComboBox')) and (Form1.Controls.Tag = 7) then
begin
TComboBox(Form1.Controls).Text := 'Its all right';
end;
end;
end;
А так точно не получиться, Controls[1] - тип TControl, не имеет свойства Items, ну как, понятно?
TComboBox - наследник TControl, т.е. включает все его свойства и методы
ControlCount - это сколько всего объектов в Controls, я ошибся в тексте, т.к. отчет идет с нуля.
Чтобы прога поняла, что за контрол находиться в Controls, выполняеться указание на тип, т.е. :
Controls - тип TControl
TComboBox(Controls) - это уже TComboBox.
Вот листинг для примера, возьми пустую Form1 и повесь Button1 в любое место, посмотри как она работает:
procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
MyCombo : TComboBox;
begin
For I := 1 to 10 do
begin
MyCombo := TComboBox.Create(Form1);
MyCombo.Left := 15;
MyCombo.Top := 24*I;
MyCombo.Tag := I;
Form1.InsertControl(MyCombo);
end;
For I:=0 to Form1.ControlCount-1 do
begin
If (Form1.Controls.ClassNameIs('TComboBox')) and (Form1.Controls.Tag = 7) then
begin
TComboBox(Form1.Controls).Text := 'Its all right';
end;
end;
end;
Form1.Controls[1].Items.Add('Не получается');
А так точно не получиться, Controls[1] - тип TControl, не имеет свойства Items, ну как, понятно?
It's a long way to the top if you wanna rock'n'roll
Вот что не работало оказывается! Теперь понятноForm1.InsertControl(ListBox);

Это нужно инициализировать для каждого где мы используем?
Один вопрос только непонятен:
Код: Выделить всё
Form1.InsertControl(MilkSelect);
Но теперь PageControl1 на всех страница поверх всего выводит эти лист боксы.... как тут верно записать, чтобы такого глюка не было?
В принципе, если Panel.Controls содержит только комбосы, то Tag как бы и не нужен, можно получать доступ к I-ому комбосу как Controls[I-1]
It's a long way to the top if you wanna rock'n'roll