Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398

Динамическое добавление пункта меню

13.02.2016, 01:33. Показов 2744. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, решить проблему.

Есть главное меню (см. миниатюру)

Надо программно добавить пункт меню <Хромой тарификатор> в подменю <Справочники>, поместив его в начало подменю.

Пытаюсь вот так:

VB.NET
1
2
3
Dim TMU_MenuItem_L2 As New System.Windows.Forms.ToolStripItem
 
Main.Sprav_MenuItem_L1.DropDownItems.Insert(0, TMU_MenuItem_L2)
Компилятор ругается - "New" не может использоваться для класса, объявленного как "MustInherit"
Миниатюры
Динамическое добавление пункта меню  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.02.2016, 01:33
Ответы с готовыми решениями:

Добавление пункта в контекстное меню кодом. Иконка к пункту
Добрый день. Столкнулся с одной проблемой: Формирую пункты меню (ContextMenuStrip) &quot;на ходу&quot; по условиям, но не могу...

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

Вывести название пункта меню MenuStrip
Здравствуйте. У меня следующее задание: Как вывести в статусную строку название пункта и подпункта меню из MenuStrip? ...

9
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
13.02.2016, 02:16  [ТС]
Прошу прощения - в миниатюре должен быть ТОЛЬКО пункт <ЛПУ>

Добавлено через 22 минуты
В конец подменю - добавление получается:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        If gcfg_ter <> "MOBL" Then
            Main.SuspendLayout()
            
            Main.Sprav_MenuItem_L1.DropDownItems.Item(1).Dispose()
            MainMenu_TMU_MenuItem_L2_exist = False
            
            Main.ResumeLayout()
        Else
            If Not MainMenu_TMU_MenuItem_L2_exist Then
                Main.Sprav_MenuItem_L1.DropDownItems.Add("Хромой тарификатор")
 
                Cnt = Main.Sprav_MenuItem_L1.DropDownItems.Count()
 
                Main.Sprav_MenuItem_L1.DropDownItems.Item(Cnt-1).Name = "TMU_MenuItem_L2"
 
                AddHandler Main.Sprav_MenuItem_L1.DropDownItems.Item(Cnt-1).Click, AddressOf TMU_Item_Click
 
                MainMenu_TMU_MenuItem_L2_exist = True
 
            End If
        End If
Добавлено через 28 секунд
А вставка - никак...
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18273 / 14196 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
13.02.2016, 03:02
Лучший ответ Сообщение было отмечено Ivan215 как решение

Решение

Цитата Сообщение от Ivan215 Посмотреть сообщение
Компилятор ругается - "New" не может использоваться для класса, объявленного как "MustInherit"
Модификатор MustInherit означает что это абстрактный класс и его экземпляр создать нельзя. Тебе в данном случае нужен класс ToolStripMenuItem.

Цитата Сообщение от Ivan215 Посмотреть сообщение
VB.NET
1
2
3
4
Main.SuspendLayout()
Main.Sprav_MenuItem_L1.DropDownItems.Item(1).Dispose()
MainMenu_TMU_MenuItem_L2_exist = False
Main.ResumeLayout()
1) Вызовы SuspendLayout/ResumeLayout в данном случае не нужны т.к. элементы меню не влияют на расположение элементов формы.
2) Вызывать Dispose() для элементов управления не удалив их из визуального дерева означает напрашиваться на неприятности. Эту строку следует убрать.
4
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
13.02.2016, 14:48  [ТС]
Вызывать Dispose() для элементов управления не удалив их из визуального дерева означает напрашиваться на неприятности. Эту строку следует убрать.
А как же быть, если для разных режимов работы программы нужен разный состав подменю (Main.Sprav_MenuItem_L1)?

Создавать ВСЕ пункты подменю Main.Sprav_MenuItem_L1 программно?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
13.02.2016, 15:51
Цитата Сообщение от Ivan215 Посмотреть сообщение
Создавать ВСЕ пункты подменю Main.Sprav_MenuItem_L1 программно?
А почему бы и нет? Написал себе процедурку с условиями - и вызывай когда нужно.

Также можно вкрячить все требуемые менюшки в дизайнере, а потом - в зависимости от "режима работы" - менять их свойства Visible или Enable.

Добавлено через 6 минут
А вместо Dispose Вы наверное имели ввиду МЕНЮ.Items.Remove

Добавлено через 1 минуту
VB.NET
1
Dispose
немного для другой очистки)
0
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
13.02.2016, 16:17  [ТС]
Вот спасибо. Совсем было забыл про Visible. Недавно нарвался на ситуацию, когда это свойство вообще не работает у объекта. А здесь вроде работает.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
13.02.2016, 16:27
Цитата Сообщение от Ivan215 Посмотреть сообщение
когда это свойство вообще не работает у объекта. А здесь вроде работает.
Тож было такое дело) Правда потом выяснилось что неспроста оно не работает))) Не помню чо за контрол(
0
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
13.02.2016, 21:00  [ТС]
А я помню - контекстное меню. Что у контекстного меню делает свойство Visible - совершенно не ясно.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
14.02.2016, 01:07
Цитата Сообщение от Ivan215 Посмотреть сообщение
Что у контекстного меню делает свойство Visible - совершенно не ясно.
Видимо, наследуется от Control. В дизайнере то его нет. Свойство есть - а в нем пусто)
0
21 / 22 / 10
Регистрация: 03.07.2014
Сообщений: 398
14.02.2016, 01:51  [ТС]
В дизайнере то его нет
А Вы сравните состав свойств в дизайнере и в обозревателе объектов, например для класса DataGridView...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2016, 01:51
Помогаю со студенческими работами здесь

Выполнение процедуры кнопки при выборе пункта меню
как во вкладке меню при нажатии на менюшку выполнить процедуру кнопки? у меня есть к примеру меню ФАЙЛ-&gt;Записать в БД. и есть...

Как сделать отображение галочкой выбранного пункта меню в MenuStrip?
Как сделать отображение галочкой выбранного пункта меню в MenuStrip?

Обработка правого клика мышки в ListBox и пункта вызванного меню
Как при правом клике мышки вызвать свое меню? Мне нужно в ListBox нажать на конкретной позиции(Item) правую кнопку, далее, чтобы после...

Динамическое добавление OvalShape на форму
Всем знатокам доброго времени суток! Как динамически добавлять контролы типа кнопок, лэйбов и пр. я знаю, а вот с OvalShape так не...

Динамическое добавление компонентов на форму
Подскажите, имеется окно с combobox и textbox в строку, а рядом кнопка &quot;+&quot; Как сделать чтобы по клику кнопки &quot;+&quot; добавлялось...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru