Отключить автоматическое отображение подменю при наведении в ContextMenuStrip

Если у меня есть контекстное меню с элементами подменю, можно ли остановить всплывающее/отображаемое подменю, когда я просто навожу курсор на элемент главного меню? И если да, то как?

Пример скриншота элемента подменю


person MrVimes    schedule 27.10.2013    source источник


Ответы (1)


Каждый ToolStripDropDownItem имеет свойство DropDown (типа ToolStripDropDown), относящееся к раскрывающемуся списку, который будет отображаться при наведении курсора мыши на элемент. В ToolStripDropDown есть событие Opening, которое позволяет легко отменить выпадающее меню. Используйте следующий код, все можно настроить в конструкторе формы:

//Suppose the item you want to suppress automatically showing 
//the drop down is item1
bool clicked = false;
item1.DropDown.Opening += (s,e) => {
  e.Cancel = !clicked;
  clicked = false;
};
item1.Click += (s,e) => {
  clicked = true;
  item1.ShowDropDown();
};
//The code above disables the automatic dropping-down 
//and shows the drop down by clicking on the item1.
person King King    schedule 27.10.2013
comment
Работает отлично, Спасибо! Я заметил некоторый синтаксис, которого никогда раньше не видел. Я новичок в С#. Я думаю, это способ переопределить методы С#? Я погуглю, чтобы узнать больше. - person MrVimes; 27.10.2013
comment
@MrVimes синтаксис, который я использовал, называется lambda expression, это просто удобный способ легко построить delegate, код просто используется для регистрации обработчиков событий Opening и Click. Это не override, чтобы переопределить, вам нужно создать некоторые классы, наследуемые от базового класса, и переопределить там базовые методы. - person King King; 27.10.2013