菜单点击导致表单“失去焦点”,菜单下拉菜单消失

时间:2014-02-18 17:08:56

标签: c# contextmenustrip menustrip

我在使用ContextMenuStripMenuStrip时发现了一些奇怪的表单互动。我真的不知道是什么导致了它,所以下面的内容应该为任何看到这个的人创建一个可重复的测试:

我创建了两个Windows窗体:Form1Form2。两者都添加了MenuStrip。两者都设置为StartPosition = CenterScreen

Form1有一个简单的菜单:Form2 > Open。点击“打开”将启动Form2

Form2有一个简单的菜单:Try to open > anotherTestMenuItem

  1. 启动该程序。 Form1打开。
  2. Form2打开Form1(即点击Form2 > Open)。
  3. Form2出现。
  4. Form2上,尝试打开MenuStrip(点击Try to open)。 Form1会重新显示Form2,但Form2仍有焦点(如果您在尝试打开菜单前稍微移动Form2,则可以看到此内容)。
  5. 如果我将Form2的所有者设置为Form1,则当您尝试步骤4时Form2仍然可见,但菜单第一次不显示。所有后续点击似乎都很好。

    当我尝试打开上下文菜单(在另一个表单打开的表单上)时,我注意到了这一点,它会立即消失,但只是第一次。此后每次都会正常打开。

    有没有人知道发生了什么?

3 个答案:

答案 0 :(得分:4)

是的,这是.NET 4.5的RTM版本中的一个已知错误。 This KB article提到它:

  

单击菜单项以在应用程序中打开子窗口时,与菜单和子窗口的交互行为不正确。
  
  例如,您可能会遇到以下情况:
   - 在子窗口中打开快捷菜单时,主窗口窗体将成为焦点    - 您不能使用助记符来访问菜单项。

从KB文章可以看出,这个错误已经修复了很久以前。该错误修复程序已合并到2013年1月8日首次提供的维护版本中。请确保允许Windows Update在您的计算机上部署该更新。或者下载from here

答案 1 :(得分:0)

检查您是否有:

“AutoValidate”设置为“EnablePreventFocusChange”

答案 2 :(得分:0)

确保在菜单项或上下文菜单的项目单击处理程序中未调用其Hide方法。我习惯于在开发过程中执行此操作,以便在逐步调试代码时从屏幕上获得菜单。但是,当我从这样的菜单启动辅助表单时,即使在新表单中左键单击或键入某些内容时,在新表单中的第一次右键单击也会导致焦点恢复为主要表单。我不记得我是在某个地方在线找到该解决方案还是自己发现了它。这可能与上面提到的错误不同,但是在.NET 4.7中仍然会发生这种情况。