2009-10-08 63 views
1

我有一个DataGridViewContextMenuStrip。 ContextMenuStrip的默认行为是自动关闭 - 即立即关闭与其交互的用户。我已经把它关闭以允许多用户交互(这是我想要的),但是除此之外,我真正需要的是上下文菜单随后关闭用户单击其自身外的任何地方。winforms - contextMenuStrip - 关闭点击离开

用户点击的空间可能直接位于表单上,也可能位于子控件(或孩子的子女等)上。然而,无论如何,我期望整齐捕捉'点击离开'事件,从而关闭ContextMenuStrip。

任何想法将非常感激地收到。

Tamim。

回答

5

只需在ContextMenuStrip上的 LostFocus事件中关闭即可。

设置AutoClose财产回真正和处理Closing事件。仅当ToolStripDropDownClosedEventArgsCloseReason财产等于ItemClicked才取消收盘。

+0

好主意&试了一下 - 除了事件不发射!当我点击时,甚至例如选择父DGV中的单元格,ContextMenuStrip上的LostFocus()不会被触发。任何想法纠正这.. ..? – 2009-10-08 17:34:58

+0

啊,在AutoClose为false时绝对不能被触发。将更新答案... – dotjoe 2009-10-08 20:01:42

0

您可以关注这些人在this SO question中所做的事情。我不确定这是否会导致用户界面闪烁,但它可能会让你做你想做的事情。

+0

感谢您的回复,但本文的建议 - 即在OnClick()中调用Show()并因此有效地“重新启动”控件 - 对我来说感觉过于复杂。另外,如果当时打开子菜单项,您将不得不重新打开它们以保持效果,这太辛苦了! – 2009-10-08 17:19:44

0

一般来说,我不鼓励标准控件的非标准行为......所以这是真正的界限。我可能会寻找一种重构UI的方式,使其对用户更直观,在选择其中一个菜单项后,用户会期望上下文菜单关闭。例如,在这种情况下,如果要修改网格中某一行的属性,则可以使用从上下文菜单中打开的属性(模式)对话框;或者实现类似于Visual Studio Properties窗口的东西,它根据选择上下文自行更新。这两种解决方案都更加灵活,并且比简单的上下文菜单向用户提供更好的反馈。