Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение свойства у нескольких компонентов 
:(
    Опции темы
UniBomb
Дата 28.7.2010, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



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

Вопрос - как можно изменить свойство у многих компонентов сразу не перебирая их?
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 28.7.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



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

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

вот есть форма. есть свойство Components в котором хранится коллекция дочерних контролов. в С++ нет иных средств, как циклы, для работы массивами. 
ради интереса - чем не устраивает перебор? Тормозит?
PM MAIL   Вверх
Alca
Дата 28.7.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

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

Цитата

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

Код

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



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

Это сообщение отредактировал(а) Alca - 28.7.2010, 10:13


--------------------
PM WWW ICQ Skype Jabber   Вверх
t4aynik
Дата 28.7.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



Можно занести все эти компоненты в Panel или GroupBox и по чекбоксу активировать/деактивировать панельку.

PM MAIL   Вверх
UniBomb
Дата 28.7.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



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

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


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


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

А намекни пожалуйста к какому типу надо привести TComponent, что бы было доступно свойство enabled. Я просто что то не могу сообразить как воспользоваться этим самым TComponent...
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 28.7.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



кто там у нас папа всех контролов - TControl, тогда типа этого
Код

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

PM MAIL   Вверх
UniBomb
Дата 28.7.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



mrbrooks, спасибо, работает  smile 
PM MAIL ICQ Skype   Вверх
t4aynik
Дата 28.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 5.6.2010

Репутация: нет
Всего: нет



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

Делай их невидимыми  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.