0

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

4

1 回答 1

1

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

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

所以我不建议尝试在你的应用程序中“修复”这个问题。在罗马做到入乡随俗...

如果您绝对必须尝试修复它,您可以尝试为您的表单监听最小化事件并手动指示上下文菜单关闭。

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); 
} 
于 2011-08-02T04:47:11.507 回答