Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 13
1

Поиск динамически созданных компонентов

27.03.2016, 20:16. Показов 4027. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Не могу сладить с поиском динамически созданных компонентов.
На форме есть PageControl.
Динамически создаю вкладку, на неё динамически накидываю компоненты, в том числе Panel, на Panel ещё компоненты накидываю. При запуске визуально выглядит именно так как я хочу.

Теперь нужно обратиться к любому из компонентов на вкладке.

Я так понял, что FindComponent, ищет компоненты только в пределах одного Parent.
Например:
Delphi
1
Form1.FindComponent[имя компоненты] as TComponent
.

Когда у меня компонентов куча и глубина с Parent не заканчивается одним уровнем, то в итоге FindComponent ничего не находит.

Например:
Завершил создание динамических компонентов.
Где-то в памяти остался последний Parent и код
Delphi
1
(FindComponent('SG' + IntToStr(LocalNumberTab)) as TStringGrid).RowCount := 1;
отрабатывает нормально.

Потом Подключаюсь к СУБД и пытаюсь обратиться к таблице для заполнения:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with FMetrForm.SQLQuery do
  begin
    SQL.Clear;
    SQL.Add('добавление SQL запроса');
    Open;
    First;
    while not EOF do
    begin
      (FindComponent('SG' + IntToStr(LocalNumberTab)) as TStringGrid).RowCount :=
        (FindComponent('SG' + IntToStr(LocalNumberTab)) as TStringGrid).RowCount + 1;
      Next;
    end;
    Close;
    SQL.Clear;
  end;
И вот этот код
Delphi
1
2
(FindComponent('SG' + IntToStr(LocalNumberTab)) as TStringGrid).RowCount :=
        (FindComponent('SG' + IntToStr(LocalNumberTab)) as TStringGrid).RowCount + 1;
уже не прокатывает.

Как организовать поиск компонента с именем 'SG' + IntToStr(LocalNumberTab) не зависимо от того какой у него Parent.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2016, 20:16
Ответы с готовыми решениями:

Свойство name у динамически-созданных компонентов массива
В общем я тот ещё нуб и вопрос возможно очевидный, но всё же. В программе участвует...

Движение элементов Shape, созданных динамически
Каким образом двигать объект, созданный динамически? Используются 3 процедуры для каждого объекта -...

Событие OnClick для динамически созданных Image
Допустим есть массив из 3 Image созданный динамически как сделать ему событие onclick

Обработка событий для динамически созданных элементов
Приветствую всех любителей программирования! Совсем недавно я решил написать небольшую программу...

1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
27.03.2016, 22:22 2
Цитата Сообщение от ilya198293 Посмотреть сообщение
Я так понял, что FindComponent, ищет компоненты только в пределах одного Parent
Не Parent-а, а Owner-а, так что все в порядке, должно искать. Только что создал на форме PageControl, в нем - панель, на ней - еще один PageControl, и туда еще Panel, и на панель уже кнопку. И запросто обычным вызовом FindComponent эту кнопку нашло.

Добавлено через 35 минут
А лучше использовать FindNestedComponent, тогда вообще проблем не будет (если все вложенные компоненты именованы, а не безымянные)
Pascal
1
2
3
4
5
6
7
8
9
var
  b : TButton;
begin
  b := FindNestedComponent(Self, 'pc_1.ts_1.pnl_1.pc_2.ts_2.pnl_2.mybutton') as TButton; // для описанного выше случая
  if Assigned(b) then
  begin
    b.Caption:='test'; // прекрасно меняется текст на кнопке
  end;
end;
1
27.03.2016, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2016, 22:22
Помогаю со студенческими работами здесь

Cоздание компонентов динамически
Сделал следующее: unit Unit1; {$mode objfpc}{$H+} interface uses

Удаление динамически созданных компонентов
... var Edt: array of TEdit; ... for I := 1 to 6 do case i of 1: begin...

Удаление динамически созданных TImage
добрый день! нужна помощ! подскажите пожалуста как при динамически созданных image-ах по клику на...

События у созданных компонентов из кода
Создал компонент, не добавляя на форму (в коде, вроде называется "динамическое создание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru