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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2015, 22:04   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Переборка элементов

Всем привет. Вопрос такой, возможно ли программно изменять имя объекта ? Поясню о чем я:

У меня есть множество элементов одного и того же класса, на пример TButton. И идея собственно в том, чтобы скомпоновать обработку элементов, а именно

не в ручную перебирать все кнопки button1, button2, button3 ... button159
Код:
button1-> Enable = false;
button2-> Enable = false;
button3-> Enable = false;
...
button159-> Enable = false;
а объединить это всё в один цикл

Код:
for(int i=0;i<160;i++) {
     ???
}
-Jack- вне форума Ответить с цитированием
Старый 17.08.2015, 22:16   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вам надо не изменять имя объекта, а проверять - не кнопка ли он ? Если кнопка, то делать ему Enable = false
У формы Form есть свойство Controls - массив всех контроллов, в том числе и кнопок. Мне кажется, с ним надо работать.

PS кстати, проверять по имени - не очень хорошо. Ведь при дизайне формы имя кнопки можно же изменить, в принципе оно не обязательно Button99, оно может быть и Vasja.

Последний раз редактировалось type_Oleg; 17.08.2015 в 22:20.
type_Oleg вне форума Ответить с цитированием
Старый 17.08.2015, 22:37   #3
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

std::vector<TButton*> buttons; //(указатели)
buttons.push_back(button1);
buttons.push_back(button2);
//...
buttons.push_back(buttonN);

//...

for(size_t i=0; i<buttons.size(); ++i)
{
buttons[i]->Enabled= false;
}

Как альтернатива std::vector<> - TList и TObjectList

Последний раз редактировалось BDA; 17.08.2015 в 23:57.
Avazart вне форума Ответить с цитированием
Старый 18.08.2015, 02:15   #4
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Avazart Посмотреть сообщение
std::vector<TButton*> buttons; //(указатели)
buttons.push_back(button1);
buttons.push_back(button2);
//...
buttons.push_back(buttonN);

//...

for(size_t i=0; i<buttons.size(); ++i)
{
buttons[i]->Enabled= false;
}

Как альтернатива std::vector<> - TList и TObjectList
Спасибо, помогло, но вот возник следующий вопрос) Как управлять этим вектором ?

Собственно класс с кнопками
Код:
class TButGroup
{
	private:
		TButGroup() {
			CreateButGroup ()
		}
		void CreateButGroup ();
		TButton*but1;
		TButton*but2;
		TButton*but3;
		TButton*but4;
		TButton*but5;
		TButton*but6;
	public:
		std::vector<TGameMenu*> all_buttons;
		TButton* GetButton (int i);

};
#endif


Код:
void TButGroup::CreateButGroup ()
{

	all_buttons.push_back(this->but1);
	all_buttons.push_back(this->but2);
	all_buttons.push_back(this->but3);
	all_buttons.push_back(this->but4);
	all_buttons.push_back(this->but5);
	all_buttons.push_back(this->but6);
}

TButton* TButGroup::GetButton (int i){
	TButton*m = this->all_buttons[i]; // Ошибка
	return m;
}
При попытке получить доступ к кнопке получаю ошибку ...
Цитата:
First chance exception at $00407513. Exception class $C0000005 with message 'access violation at 0x00407513: read of address 0x000002e0'. Process test.exe (5640)
-Jack- вне форума Ответить с цитированием
Старый 18.08.2015, 06:30   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от -Jack- Посмотреть сообщение
а объединить это всё в один цикл
А зачем Вам эта головная боль с циклами? Если все кнопки становятся недоступными (доступными) одновременно, размещаем их все на одной панели и делаем недоступной саму панель. Все дочерние компоненты на ней, будут недоступны. Даже если кнопки сгрупированы в разных местах по 10-20 штук, панелей будет много меньше чем самих кнопок.
Есть ещё компонент GroupButton. В нём можно задавать количество кнопок и работать с ними, как с массивом или самому компоненту присваивать значение GroupButton->Enabled = false;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 18.08.2015 в 06:36.
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.08.2015, 19:46   #6
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
А зачем Вам эта головная боль с циклами? Если все кнопки становятся недоступными (доступными) одновременно, размещаем их все на одной панели и делаем недоступной саму панель. Все дочерние компоненты на ней, будут недоступны. Даже если кнопки сгрупированы в разных местах по 10-20 штук, панелей будет много меньше чем самих кнопок.
Есть ещё компонент GroupButton. В нём можно задавать количество кнопок и работать с ними, как с массивом или самому компоненту присваивать значение GroupButton->Enabled = false;
На самом деле совершенно не головная боль. Главное с вышеупомянутой ошибкой разобраться )))

Я для простоты объяснения написал, что использую TButton, на деле самописные элементы, которые по своей задаче напоминают TButton ...
-Jack- вне форума Ответить с цитированием
Старый 01.09.2015, 12:26   #7
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
TButton*but1;
		TButton*but2;
		TButton*but3;
		TButton*but4;
		TButton*but5;
		TButton*but6;
А где создание самих кнопок или они на форме?
Где:
Код:
TButton * but1 = new TButton(this);
Если на форме то:
Код:
for(int i=0; i< this->ControlCount; ++i)
	{
		if(this->Controls[i]->ClassNameIs("TButton"))
		{
			if(Controls[i]->Enabled)
				Controls[i]->Enabled = false;
			else
				Controls[i]->Enabled = true;
		}
	}
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 01.09.2015 в 12:31.
Krok27 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти среднее арифметическое целых частей элементов числового массива из 30 элементов noobcplusplus Общие вопросы C/C++ 3 02.02.2015 18:30
Дан массив из 25 элементов. Найти сумму элементов, больших последнего элемента. Olzhakesh C# (си шарп) 6 10.05.2014 17:15
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Дан массив из N элементов (чисел),определить количество элементов кратных 3. Woha Общие вопросы C/C++ 2 08.12.2008 13:12