Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обратиться к компонентам созданным в реалтайме [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
Поройся тут таких вопросов была куча.


Наверх

Титульная страница Поиск, карта сайта Написать письмо