Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654

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

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

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

Спасибо заранее всем откликнувшимся.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2018, 18:32
Ответы с готовыми решениями:

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

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

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

8
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.04.2018, 20:41
Ну, динамически не намного сложней, чем статически.
Вот пример всего в две строки__
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
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
23.04.2018, 20:54  [ТС]
Цитата Сообщение от 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
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.04.2018, 20:57
Вот пример добавления подпунктов к пункту 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
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
23.04.2018, 21:04  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
MainMenu1->Items->Items[1]->Add(NewItem[0]);
Супер !
А как мне узнать под каким номером мой пункт, если мне известно только его имя ("N1") ?
Либо как сразу в него добавить ?
C++
1
N1->Items->Items[0]->Add(m);
и
C++
1
N1->Items->Add(m);
не прокатывает...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.04.2018, 21:14
Цитата Сообщение от alkl Посмотреть сообщение
под каким номером мой пункт, если мне известно только его имя
Думаю, поиском__
C++
1
2
3
     TMenuItem *Nk;
     Nk = MainMenu1->Items->Items[1]->Find("MM3");
     if(Nk) Label2->Caption = Nk->MenuIndex ;
0
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
23.04.2018, 21:22  [ТС]
Не хочет, зараза...
Вот моя иерархия (во вложении).
Пункт "Порт" имеет имя "N1". Мне нужно в него добавить подпункты.
В основные ("Настройки", "Подключиться", ...) добавляется без проблем. А уже во вложенные - ни в какую...
Изображения
 
0
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
23.04.2018, 21:28  [ТС]
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
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.04.2018, 21:28
Значит ищете не там. Здесь же несколько уровней, - если пункты основного меню, то
C++
1
MainMenu1->Items ->Find("Third");
Если подпункты напр. первого пункта, то
C++
1
MainMenu1->Items->Items[0]->Find("N1");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2018, 21:28
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru