winforms - contextMenuStrip - закрыть при нажатии - PullRequest
1 голос
/ 08 октября 2009

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

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

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

Тамим.

Ответы [ 3 ]

6 голосов
/ 08 октября 2009

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

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

0 голосов
/ 08 октября 2009

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

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

0 голосов
/ 08 октября 2009

Вы можете следить за тем, что эти парни сделали в этом ТАКОМ вопросе . Я не уверен, что это может вызвать мерцание в пользовательском интерфейсе, но это может позволить вам делать то, что вы хотите.

...