winforms - contextMenuStrip - закрывать при нажатии

У меня есть DataGridView с ContextMenuStrip. По умолчанию ContextMenuStrip автоматически закрывается, т.е. немедленно закрывается при взаимодействии с пользователем. Я отключил это, чтобы разрешить множественное взаимодействие с пользователем (это то, что я хочу), однако помимо этого мне действительно нужно, чтобы контекстное меню впоследствии закрывалось при нажатии пользователем в любом месте вне себя.

Пространство, в котором пользователь щелкает мышью, может находиться непосредственно в форме или в дочернем элементе управления (или дочернем элементе дочернего элемента и т. Д.). И все же, несмотря на это, я хочу аккуратно зафиксировать событие «щелкнуть» и, таким образом, закрыть ContextMenuStrip.

Любые идеи будут с благодарностью приняты.

Тамим.


person Tamim Sadikali    schedule 08.10.2009    source источник


Ответы (3)


Просто закройте его в событии LostFocus в ContextMenuStrip.

Установите для свойства AutoClose значение < strong> true и обработать событие Closing. Отмените закрытие, только если CloseReason объекта ToolStripDropDownClosedEventArgs равно ItemClicked.

person dotjoe    schedule 08.10.2009
comment
Хорошая идея, попробовал - за исключением того, что мероприятие не сработало !! Когда я щелкаю и даже например выберите ячейку в родительском DGV, LostFocus () в ContextMenuStrip просто не запускается. Есть идеи по исправлению этого ..? - person Tamim Sadikali; 08.10.2009


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

В этой ситуации, если вы, например, изменяете свойства строки в сетке, вы можете использовать диалоговое окно «Свойства» (модальное), которое открывается из контекстного меню; или реализовать что-то вроде окна свойств Visual Studio, где оно обновляется в зависимости от контекста выбора. Оба этих решения более гибкие и обеспечивают лучшую обратную связь с пользователем, чем простое контекстное меню.

person Jon Seigel    schedule 08.10.2009