Чтобы предотвратить закрытие контекстного меню при щелчке по элементу, выполните следующие действия.
В событии mousedown для ContextMenuItems установите флаг в значение false, а затем верните его в значение true в событии закрытия элемента contextmenu.
Пример:
Private blnClose As Boolean = True
Private Sub MoveUpToolStripMenuItem_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MoveUpToolStripMenuItem.MouseDown
blnClose = False
End Sub
Private Sub ContextMenuStrip1_Closing(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripDropDownClosingEventArgs) Handles ContextMenuStrip1.Closing
e.Cancel = Not blnClose
blnClose = True
End Sub
Я не думаю, что для этого есть свойство в ContextMenuStrip.
Обходной путь, который мы используем в нашем приложении, заключается в том, что при щелчке по событию ContextMenuStrip мы выполняем некоторую обработку, затем, если мы хотим, чтобы контекстное меню оставалось открытым, мы просто снова вызываем ContextMenuStrip.Show
. Это будет хорошо работать, если в ContextMenuStrip есть только один уровень. Если есть подменю и подменю, вам придется повторно выбрать меню, которые были открыты до щелчка, и я не уверен, как это можно сделать ...
событие закрытия
устанавливает e.Cancel = true, чтобы меню оставалось открытым
единственная проблема заключается в том, что событие не сообщает вам, что было нажато, поэтому вы должны отслеживать об этом сами. установить какой-то флаг в событии Click для элементов, меню которых должно оставаться открытым. затем в событии закрытия проверьте флаг и установите e.Cancel соответствующим образом.
OnClosing, выполните: e.Cancel = e.CloseReason! = ToolStripDropDownCloseReason.CloseCalled; а затем, когда вы решите закрыть, вызовите Close ().