2009-10-08 2 views
1

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

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

Любые идеи были бы очень благодарны.

Tamim.

ответ

5

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

Установите AutoClose свойства назад истинный и обрабатывать Closing события. Отменить закрытие, только если свойство CloseReasonToolStripDropDownClosedEventArgs равно ItemClicked.

+0

Хорошая идея и пробовал - кроме случая не срабатывает !! Когда я нажимаю и даже, например, выберите ячейку в родительском DGV, LostFocus() в ContextMenuStrip просто не запускается. Любые идеи по исправлению этого ...? –

+0

Ах, он никогда не должен срабатывать, когда AutoClose является ложным. обновит ответ ... – dotjoe

0

Вы можете следить за тем, что сделали эти ребята в this SO question. Я не уверен, что это вызовет мерцание в ui, но это может позволить вам сделать то, что вы хотите.

+0

Спасибо за ответ, но предложение здесь - то есть вызвать Show() в OnClick() и, таким образом, эффективно «рекустицировать» элемент управления - чувствует себя слишком сложным для меня. Плюс, если в то время были открыты пункты подменю, вам нужно было бы снова открыть их, чтобы сохранить эффект, и это слишком тяжелая работа! –

0

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

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

Смежные вопросы