Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/41: Рейтинг темы: голосов - 41, средняя оценка - 4.88
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12

Один обработчик для 100 кнопок?

30.03.2011, 00:44. Показов 8948. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть 100 кнопок.
Как сделать один раз для всех кнопок, чтобы не описывать
нажатие для каждой конкретной кнопки сто раз:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TFChoice::Button1Click(TObject *Sender)
{
        ActionClickButtonExecute(Sender);
}
.
.
.
.
void __fastcall TFChoice::Button100Click(TObject *Sender)
{
        ActionClickButtonExecute(Sender);
}
Спасибо.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2011, 00:44
Ответы с готовыми решениями:

Один обработчик для 9 кнопок
Привет, ребята. Нужна Ваша помощь. Пишу небольшую обучающую программку. Вот в чем проблема. На форме имеется 9 кнопок, код для которых...

Один обработчик для нескольких Image
Ребят подскажите плиз как работать с обработчиками компонентов а то ни где инфы нет "русскоязычной". Вопрос имеется несколько...

TMainMenu Один обработчик для нескольких пунктов
Всем доброго времени суток. Задача : Создать несколько подпунктов меню (лучше динамически) и создать для них один обработчик, в котором...

47
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 00:48
Dersou, а зачем тебе 100 кнопок, если в них ты прописываешь одинаковые действия?
1
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 00:53  [ТС]
Действия разные в зависимости от тега кнопки - все в Action
1
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 00:57
Dersou,
Действия разные в зависимости от тега кнопки
- я так понимаю - в зависимости от Button1->Caption... Если название на кнопке 1 - то действие 1, если два (на другой кнопке) - то действие 2, да?
1
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,303
30.03.2011, 01:03
использовать массив?
1
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 01:09  [ТС]
Не заголовок, а Tag - число и т.д.
По существу вопроса можешь пособить, али как?

Добавлено через 4 минуты
например?

З.Ы. я на Чукотке воевал
1
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 01:12
Dersou, Если нехочешь прописывать одно и тоже в каждой кнопке сто раз - то сделай так:

Оставь на форме одну кнопку, а в обработчике на кнопке (onClick) задай переменную счетчик, и при каждом нажатии прибавляй к Tag 1
C++
1
Button1->Tag==Button1->Tag+1;
можешь и без счетчика, на твое усмотрение.

Если тебе нужно 100 кнопок - то прописывай одно и тоже в каждой
1
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 01:20  [ТС]
Заголовок каждой кнопки содержит уникальную информацию, а пользователь, на свое усмотрение, выбирает - в какую кнопку тыркнуть.
1
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 01:22
Dersou, тогда прописывай все для каждой....

Copy Past тебе в помощь
1
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 01:28  [ТС]
Это не правильное решение.
В билдере должно делаться ВСЁ!
Просто мне грамоты не хватает.
1
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 01:32
Dersou, да ты быстрее эту одну несчастную строчку в каждую кнопку вставишь, чем дождешься (или найдешь сам) другое решение...
1
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 01:41  [ТС]
Да, но если найду - буду знать, а нет - всю жизнь строчки втыкать. Обидно, однако.
2
 Аватар для j_shinn
30 / 30 / 0
Регистрация: 07.11.2010
Сообщений: 77
30.03.2011, 01:43
Dersou, + тебе за твое стремление к познанию чего то нового
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.03.2011, 03:08
... похоже, все на Чукотке воевали
C++
1
2
3
4
5
6
7
for(int i = 0; i < ComponentCount; i++) { 
  TButton* button; 
  button = dynamic_cast<TButton*>(Components[i]); 
  if (button->Tag == 1) { //или button->Tag == i и т.д.
    ShowMessage("Однако, кнопка с тегом 1, чукчи..."); 
  }
}
Вот так рассмешили на сон грядущий , всем - по "спасибо" .
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
30.03.2011, 05:09
Всё просто:
1) Для первой кнопки пишешь название функции обработки в OnClick и жмёшь enter.
2) Затем выделяешь все остальные кнопки и в OnClick выбираешь функцию обработки, указанную в пункте 1
2
7 / 7 / 0
Регистрация: 06.08.2010
Сообщений: 12
30.03.2011, 10:42  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
... похоже, все на Чукотке воевали
C++
1
2
3
4
5
6
7
for(int i = 0; i < ComponentCount; i++) { 
  TButton* button; 
  button = dynamic_cast<TButton*>(Components[i]); 
  if (button->Tag == 1) { //или button->Tag == i и т.д.
    ShowMessage("Однако, кнопка с тегом 1, чукчи..."); 
  }
}
Вот так рассмешили на сон грядущий , всем - по "спасибо" .
Не въехал. Мне надо при OnClick() любой кнопки передать значение Tag в общий обработчик
не рисуя для каждой кнопки if() или OnClick()
А эта конструкция, мне кажется, просто перебирает подряд все кнопки.
Или я опять в лыжи обутый?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
30.03.2011, 11:29
Dersou, тебе kzru_hunter все правильно написал.
только оно как то несразу все запоминает.

нужно выделить все кнопки, выбрать сначало какоето левое действие в онклик, а потом еще раз выделить и выбрать уже нормальное действие.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2011, 04:30
Цитата Сообщение от Dersou Посмотреть сообщение
Не въехал. Мне надо при OnClick() любой кнопки передать значение Tag в общий обработчик
не рисуя для каждой кнопки if() или OnClick()
Обрабатываете сообщение нажатия кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button(TMessage& Msg)
{
  switch (Msg.Msg) {
    case WM_CLICK : {
      for(int i = 0; i < ComponentCount; i++) { 
        TButton* button; 
        button = dynamic_cast<TButton*>(Components[i]);
        if (button->Tag == i) {
          ActionClickButtonExecute(Sender); // не знаю, как оно там у вас организовано
      }
    }
    break;
  }
  ...
}
Если в
C++
1
ActionClickButtonExecute(Sender);
прописаны разные (свои) действия для каждой кнопки, поскольку Action я не люблю, то прописал бы это так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Button(TMessage& Msg)
{
  switch (Msg.Msg) {
    case WM_CLICK : {
      for(int i = 0; i < ComponentCount; i++) { 
        TButton* button; 
        button = dynamic_cast<TButton*>(Components[i]); 
        if (button->Tag == 1) { // или switch ... case вместо if
          // действие
        }
        if (button->Tag == 2) {
          // действие
        }
      }
    }
    break;
  }
  ...
}
, получив таким образом аккуратный и наглядный код, потом сунул эту простынь в отдельный юнит, а обработчики для каждой кнопки, которые можно создать в Инспекторе Объектов, оставил для других потребностей.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
31.03.2011, 05:59
В билдере у каждого объекта с событиями для каждого события есть ещё и свойство-обработчик. Так вот, тот обработчик уже не процедура, а переменная процедурного типа, только это переменная-член. Ну так вот, одной кнопке делаешь обработчик, а всем остальным его в инспекторе присваиваешь.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
31.03.2011, 07:16
Цитата Сообщение от taras atavin Посмотреть сообщение
В билдере у каждого объекта с событиями для каждого события есть ещё и свойство-обработчик. Так вот, тот обработчик уже не процедура, а переменная процедурного типа, только это переменная-член. Ну так вот, одной кнопке делаешь обработчик, а всем остальным его в инспекторе присваиваешь.
taras atavin, ты это
Цитата Сообщение от kzru_hunter
Всё просто:
1) Для первой кнопки пишешь название функции обработки в OnClick и жмёшь enter.
2) Затем выделяешь все остальные кнопки и в OnClick выбираешь функцию обработки, указанную в пункте 1
и все предыдущее/последующее - не понял ? или просто прочитать не осилил ? хотя бы по буквам ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2011, 07:16
Помогаю со студенческими работами здесь

Один обработчик для нескольких кнопок
Вопрос: Как для калькулятора создать один обработчик для цифровых кнопок (0-9), чтобы для каждой не писать ....+1 (+2) и т.д.

Один обработчик для динамических кнопок
Кнопки создаются/удаляются, и у них один OnClickListener. Но при нажатии, надо получить текст именно с той кнопки на которую нажали. Как...

Один обработчик событий для нескольких кнопок
Подскажите как создать один обработчик для нескольких кнопок?У меня на листе ехсеl есть 2 кнопки ActiveX,я создал в макросе массив ...

один обработчик нажатия для всех кнопок
На панель динамически добавляю какое-то количество кнопок ,с похожим функционалом. Есть один и тот же обработчик нажатия для всех этих...

Один обработчик на несколько кнопок
private void p7_Click(object sender, EventArgs e) { foreach (var item in this.Controls) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru