![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обратиться к компонентам созданным в реалтайме [D7, XP]
daimyo © (2006-05-05 13:50:00)вообщем вот )
я создал в реал тайме несколько DBedit`ОВ теперь мне необходимо обратиться к каждому из них кокретно
вот код:
for i:=0 to 10 do
begin
dbedit:=tdbedit.Create(form2);
with dbedit do
begin
Left:= 184;
Top:= 72+21*i+15;
Width:= 121;
DataField:= form2.DBGrid1.Columns.Items[i].Title.Caption;
DataSource:= Form2.DataSource1;
end;
dbedit.name:='DB'+inttostr(i) ;
dbedit.Parent:=form2;
dbedit.Show;
end;
вот как мне например обратиться к dbedit`y с именем DB1 что изменить у него напримерсвойство DataField, понятно что в массиве но вот как их перебирать то ?? )
ANB (2006-05-06 15:44:00) [1]
> Для фиксированного количества конечно массив лучше, но я
> както привык писать так, чтобы не ограничивать себя на будущее
> ...
Никто не мешает использовать динамический массив. Впрочем, у формы уже есть такой массив : Components.
balepa (2006-05-06 11:23:00) [2]
> Ega23 © (06.05.06 11:21) [8]
Если надо будет Найдут только др. способом :)
Ega23 (2006-05-06 11:21:00) [3]
> Vasiliy (05.05.06 14:04) [2]
> Function GetDBEdit(Name:String):TDBEdit;
> Var I:Integer;
> begin
> Result:=Nil;
> For I:=0 to form2.ControlCount-1 do
> If (form2.Controls[I] is TDBEdit) and (form2.Controls[I].
> Name=Name) then
> Result:=TDBEdit(form2.Controls[I]);
> end;
>
Функция написана только для частного случая. Если DBEdit лежит на панели, которая лежит на Form2, то его не найдут.
Daimyo (2006-05-06 11:11:00) [4]Спасибо :)
Amoeba (2006-05-05 15:45:00) [5]Используй не массив, а TObjectList, раз количество не фиксированное.
balepa (2006-05-05 14:19:00) [6]
> Vasiliy (05.05.06 14:16) [4]
Правильно нечего себя ограничивать :)
Vasiliy (2006-05-05 14:16:00) [7]Для фиксированного количества конечно массив лучше, но я както привык писать так, чтобы не ограничивать себя на будущее ...
balepa (2006-05-05 14:11:00) [8]Если фиксированое количество DBEdit'oв Лучше массив использовать, ИМХО
Vasiliy (2006-05-05 14:04:00) [9]ссылку на контрол можно получить так:
Function GetDBEdit(Name:String):TDBEdit;
Var I:Integer;
begin
Result:=Nil;
For I:=0 to form2.ControlCount-1 do
If (form2.Controls[I] is TDBEdit) and (form2.Controls[I].Name=Name) then
Result:=TDBEdit(form2.Controls[I]);
end;
Предварительно в цикле нужно назначить каждому контролу своё имя
for i:=0 to 10 do
begin
dbedit:=tdbedit.Create(form2);
with dbedit do
begin
Name:='DB'+IntToStr(i);
Left:= 184;
Top:= 72+21*i+15;
Width:= 121;
DataField:= form2.DBGrid1.Columns.Items[i].Title.Caption;
DataSource:= Form2.DataSource1;
end;
dbedit.name:='DB'+inttostr(i) ;
dbedit.Parent:=form2;
dbedit.Show;
end;
Обращаться так: GetDBEdit('DB1').DataSource:= ...
balepa (2006-05-05 14:03:00) [10]FindComponent
Или создавай массив из DBEdit'ов и обращайся к ним
for i:= 1 to n do
DB[i].XXX:= XXX
Поройся тут таких вопросов была куча.