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

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

30.03.2011, 00:44. Показов 9010. Ответов 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
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru