Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2017, 19:28   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
Вопрос Получить имена компонентов с контрола

Хочу с другой формы получить имена всех CheckBox. Если обращаться к форме, то работает, если к TabSheet PageControl на форме, то не работает. Чего не хватает для корректной работы?
Код:
procedure TForm25.Button1Click(Sender: TObject);
  procedure CheckSelected(Form: TForm; List: TStrings);
  var
    I: Integer;
  begin
    for I := 0 to Form.ComponentCount - 1 do
    begin
      if Form.Components[I] is TCheckBox then
        List.Add((Form.Components[I] as TCheckBox).Name);
    end;
  end;
  procedure CheckSelected2(TabSheet: TTabSheet; List: TStrings);
  var
    I: Integer;
  begin
    for I := 0 to TabSheet.ComponentCount - 1 do
    begin
      if TabSheet.Components[I] is TCheckBox then
        if (TabSheet.Components[I] as TCheckBox).Parent = TabSheet then List.Add((TabSheet.Components[I] as TCheckBox).Name);
    end;
  end;
var
  SL: TStringList;
  I: Integer;
begin
  SL := TStringList.Create;
  CheckSelected(Form26, SL); // Работает
  CheckSelected2(Form26.TabSheet1, SL); // Не работает
  ShowMessage(SL.Text);
  FreeAndNil(SL);
end;

Последний раз редактировалось Shouldercannon; 23.12.2017 в 20:22.
Shouldercannon вне форума Ответить с цитированием
Старый 23.12.2017, 20:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
    for I := 0 to TabSheet.ControlCount - 1 do
      if TabSheet.Controls[I] is TCheckBox then List.Add((TabSheet.Controls[I] as TCheckBox).Name);
И Parent нечего проверять, он другой и не может быть. Как думаешь, как в Controls контролы попадают? А Components для owner
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.12.2017, 21:08   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
    for I := 0 to TabSheet.ControlCount - 1 do
      if TabSheet.Controls[I] is TCheckBox then List.Add((TabSheet.Controls[I] as TCheckBox).Name);
как в Controls контролы попадают?
Сами в себя или тут опечатка?
Shouldercannon вне форума Ответить с цитированием
Старый 23.12.2017, 21:19   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не опечатка. В parent присваиваешь указатель на родителя - тут же указатель на контрол и появляется в Controls родителя. При изменении родителя правятся соответственно и их Controls. А в Components владельца помещается при создании объекта, см. параметh Owner. Когда мышкой пихаешь компонент на форму, то владельцем выступает форма, поэтому и не находил в Components закладки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить изображение с контрола (C#) NewLamer&Programer Помощь студентам 1 07.06.2015 15:44
Имена невизуальных компонентов min@y™ Общие вопросы Delphi 6 28.04.2015 15:40
Как получить цвет заливки контрола Тоба Win Api 7 18.07.2013 14:44
Непривычные имена компонентов Dephi 7... portible Помощь студентам 2 16.09.2011 08:29
Получить изображение контрола созданного в рантайм Celestia Общие вопросы Delphi 3 08.05.2011 10:05