Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
1

TMainMenu Один обработчик для нескольких пунктов

23.04.2018, 18:32. Просмотров 449. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток.
Задача : Создать несколько подпунктов меню (лучше динамически) и создать для них один обработчик, в котором можно было бы определить, какой конкретно подпункт был выбран (кликнут).
Господа, натолкните на мысль, пожалуйста. Если будет пример - вообще супер.

Спасибо заранее всем откликнувшимся.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2018, 18:32
Ответы с готовыми решениями:

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

Один обработчик для нескольких ImageButton
Есть у меня несколько ImageButton на TableView. На них изображение. Создаю обработчик дерез...

Один обработчик для нескольких PictureBox
Всем доброго времени суток. Есть много пикчер боксов около 16 штук, и на каждый нужно привязать...

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

8
Практикантроп
4643 / 2572 / 484
Регистрация: 23.09.2011
Сообщений: 5,507
23.04.2018, 20:41 2
Ну, динамически не намного сложней, чем статически.
Вот пример всего в две строки__
C++
1
2
3
4
5
void __fastcall TForm1::First1Click(TObject *Sender)
{
    TMenuItem *mi = dynamic_cast<TMenuItem*>(Sender);
    Label1->Caption = mi->Caption ; 
}
Для пункта меню First пишется такой вот универсальный обработчик. Затем двум другим пунктам назначается (в Menu Designer) на событие (Events) Click этот самый обработчик для первого пункта. И всё.
Дело в том, что информация о пункте, который был активирован - в этом Sender, который является классом TMenuItem.
0
Изображения
 
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
23.04.2018, 20:54  [ТС] 3
Цитата Сообщение от nick42 Посмотреть сообщение
Для пункта меню First пишется такой вот универсальный обработчик. Затем двум другим пунктам назначается (в Menu Designer) на событие (Events) Click этот самый обработчик для первого пункта. И всё.
Дело в том, что информация о пункте, который был активирован - в этом Sender, который является классом TMenuItem.
Да, спасибо, с одним для всех обработчиком уже разобрался. Всё оказалось просто.
C++
1
2
3
4
5
void __fastcall TForm1::COMMnuClick(TObject *Sender) {
TMenuItem *m = (TMenuItem *)Sender;
 
ShowMessage(m->Caption);
}
Сейчас разбираюсь с дин. добавлением подпунктов. Никак не получается. Запутался я в этих Item'ах ...

Добавлено через 8 минут
Нашёл пример - Создание и удаление пунктов меню динамически Но он, к сожалению, у меня не заработал. В меню ничего не добавляется.
0
Практикантроп
4643 / 2572 / 484
Регистрация: 23.09.2011
Сообщений: 5,507
23.04.2018, 20:57 4
Вот пример добавления подпунктов к пункту Second__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
     TMenuItem *NewItem[3];
     NewItem[0] = new TMenuItem(this);
     NewItem[0]->Caption = "MM1";
     NewItem[0]->OnClick = First1Click;
     MainMenu1->Items->Items[1]->Add(NewItem[0]);
     NewItem[1] = new TMenuItem(this);
     NewItem[1]->Caption = "MM2";
     NewItem[1]->OnClick = First1Click;
     MainMenu1->Items->Items[1]->Add(NewItem[1]);
     NewItem[2] = new TMenuItem(this);
     NewItem[2]->Caption = "MM3";
     NewItem[2]->OnClick = First1Click;
     MainMenu1->Items->Items[1]->Add(NewItem[2]);
1
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
23.04.2018, 21:04  [ТС] 5
Цитата Сообщение от nick42 Посмотреть сообщение
MainMenu1->Items->Items[1]->Add(NewItem[0]);
Супер !
А как мне узнать под каким номером мой пункт, если мне известно только его имя ("N1") ?
Либо как сразу в него добавить ?
C++
1
N1->Items->Items[0]->Add(m);
и
C++
1
N1->Items->Add(m);
не прокатывает...
0
Практикантроп
4643 / 2572 / 484
Регистрация: 23.09.2011
Сообщений: 5,507
23.04.2018, 21:14 6
Цитата Сообщение от alkl Посмотреть сообщение
под каким номером мой пункт, если мне известно только его имя
Думаю, поиском__
C++
1
2
3
     TMenuItem *Nk;
     Nk = MainMenu1->Items->Items[1]->Find("MM3");
     if(Nk) Label2->Caption = Nk->MenuIndex ;
0
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
23.04.2018, 21:22  [ТС] 7
Не хочет, зараза...
Вот моя иерархия (во вложении).
Пункт "Порт" имеет имя "N1". Мне нужно в него добавить подпункты.
В основные ("Настройки", "Подключиться", ...) добавляется без проблем. А уже во вложенные - ни в какую...
0
Изображения
 
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
23.04.2018, 21:28  [ТС] 8
C++
1
2
TMenuItem *Nk;
Nk = MainMenu1->Items->Items[1]->Find("N1");
Nk, в этом случае, - NULL.

Добавлено через 3 минуты
Вот так получилось :
C++
1
MainMenu1->Items->Items[0]->Items[0]->Add(m);
0
Практикантроп
4643 / 2572 / 484
Регистрация: 23.09.2011
Сообщений: 5,507
23.04.2018, 21:28 9
Значит ищете не там. Здесь же несколько уровней, - если пункты основного меню, то
C++
1
MainMenu1->Items ->Find("Third");
Если подпункты напр. первого пункта, то
C++
1
MainMenu1->Items->Items[0]->Find("N1");
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2018, 21:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Один обработчик для нескольких switch
Привет. Делаю приложение для управления устройством на ардуино по блютуз. Кое как разобрался как...

Один обработчик событий для нескольких объектов
Здравствуйте, подскажите пожалуйста, как так сделать? В VB.NET надо после Handler(вроде) писать, а...

Один обработчик события для нескольких TextBox'ов
Добрый день! У меня в приложении 4 текстбокса пишу код для запрета ввода букв, как его применить...

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

Один обработчик событий для нескольких разных элементов
Суть в следующем: Есть несколько TextBox, По у молчанию в них записан одинаковый текст. Как...

Можно ли описать один обработчик для нескольких TextBox-ов?
Всем привет! Хотелось бы спросить, можно ли прописать один метод для разных элементов? В моем...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.