Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 23.12.2017, 20:28   #1
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,740
Репутация: 226

icq: 473732523
Вопрос Получить имена компонентов с контрола

Хочу с другой формы получить имена всех 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 в 21:22.
Shouldercannon вне форума   Ответить с цитированием
Старый 23.12.2017, 21:27   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,361
Репутация: 6052
По умолчанию

Код:

    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, 22:08   #3
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,740
Репутация: 226

icq: 473732523
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:

    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, 22:19   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,361
Репутация: 6052
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить изображение с контрола (C#) NewLamer&Programer Помощь студентам 1 07.06.2015 16:44
Имена невизуальных компонентов min@y™ Общие вопросы Delphi 6 28.04.2015 16: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


03:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru