按WindowsLogs + D时,ContextMenustrip不会自动关闭

时间:2011-08-02 04:39:59

标签: c# .net winforms contextmenustrip

我的应用程序中有一个名为“cmsView”的contextmenustrip。当我右键单击鼠标按钮时,cmsView已打开并单击应用程序cmsView关闭的位置。 如果我打开cmsView并按下Windowslogo + D(即,最小化应用程序)并再次cmsView没有关闭并处于打开状态,每当我点击应用程序中的一些并失去焦点。

如何解决这个问题。

此致 丹娘

1 个答案:

答案 0 :(得分:1)

这不是您的应用程序或ContextMenuStrip控件中的错误。如果有的话,它是带有弹出菜单控件的Windows中的一个错误,而WinForms控件实际上是模仿该错误,以便它们的行为符合用户的期望。

您可以在记事本等简单应用程序中自行测试。打开一个新实例,右键单击文档区域,然后按 Win + D 。即使应用程序的窗口消失(最小化),上下文菜单仍将在桌面上保持打开和可见。

因此,我不建议您在应用程序中尝试“修复”此问题。在罗马时,像罗马人一样......

如果您绝对 尝试修复它,您可以尝试listening for a minimize event表单并手动指示关闭上下文菜单。

private const int WM_SYSCOMMAND = 0x0112; 
private const int SC_MINIMIZE = 0xf020; 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_SYSCOMMAND) 
    { 
        if (m.WParam.ToInt32() == SC_MINIMIZE) 
        { 
            // Close the context menu strip when the form is being minimized
            cmsView.Close();    
        } 
    } 
    base.WndProc(ref m); 
}