Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Изменение свойства у нескольких компонентов


Автор: UniBomb 28.7.2010, 09:23
Добрый день. На форме есть прорва компонентов разного типа (и батоны, и стринггриды, и чекбоксы). Также на форме есть один важный чекбокс. Если важный чекбокс не установлен, у всех других компонентов свойство Enabled должно быть равно false. Если установлен, то соответсвенно наоборот.

Вопрос - как можно изменить свойство у многих компонентов сразу не перебирая их?

Автор: mrbrooks 28.7.2010, 09:46
Цитата(UniBomb @  28.7.2010,  10:23 Найти цитируемый пост)
Вопрос - как можно изменить свойство у многих компонентов сразу не перебирая их? 

ну а как себе ты это представляешь?

вот есть форма. есть свойство Components в котором хранится коллекция дочерних контролов. в С++ нет иных средств, как циклы, для работы массивами. 
ради интереса - чем не устраивает перебор? Тормозит?

Автор: Alca 28.7.2010, 10:09
Цитата

Вопрос - как можно изменить свойство у многих компонентов сразу не перебирая их?

Цитата

• FindComponent возвращает указатель экземпляра компоненты, о которой известно только имя, но неизвестна ссылка на владельца. Допустим, что форма содержит экземпляр компоненты TEdit с именем Editl. Чтобы получить указатель на экземпляр Editl и адресовать его текст, используйте следующий код:

Код

void_fastcall TFormI::ButtonlClick(TObject *Sender) {
    TEdit * Editlnstance = FindComponent("Editl");
    (TEdit *)(FindComponent("Editl"))->Text = "Hello";
}



Добавлено @ 10:12
Все равно метод FindComponent использует цикл для поиска. 

Автор: t4aynik 28.7.2010, 11:16
Можно занести все эти компоненты в Panel или GroupBox и по чекбоксу активировать/деактивировать панельку.

Автор: UniBomb 28.7.2010, 11:41
Цитата(mrbrooks @  28.7.2010,  10:46 Найти цитируемый пост)
ну а как себе ты это представляешь?

Я надеялся на какое-нибудь волшебное свойство ParentEnabled  smile 


t4aynik, не вариант, т.к. все эти контролы внешне никак не изменятся и будет казаться, что они доступны.


Цитата(mrbrooks @  28.7.2010,  10:46 Найти цитируемый пост)
есть свойство Components в котором хранится коллекция дочерних контролов

А намекни пожалуйста к какому типу надо привести TComponent, что бы было доступно свойство enabled. Я просто что то не могу сообразить как воспользоваться этим самым TComponent...

Автор: mrbrooks 28.7.2010, 12:15
кто там у нас папа всех контролов - TControl, тогда типа этого
Код

for(int i = 0; i<ComponentCount;i++) (dynamic_cast<TControl*>(Components[i]))->Enabled = false;

Автор: UniBomb 28.7.2010, 12:34
mrbrooks, спасибо, работает  smile 

Автор: t4aynik 28.7.2010, 13:06
Цитата(UniBomb @  28.7.2010,  11:41 Найти цитируемый пост)
t4aynik, не вариант, т.к. все эти контролы внешне никак не изменятся и будет казаться, что они доступны.

Делай их невидимыми  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)