Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我按下WindowsLogs+;时,ContextMenustrip不会自动关闭;D_C#_.net_Winforms_Contextmenustrip - Fatal编程技术网

C# 当我按下WindowsLogs+;时,ContextMenustrip不会自动关闭;D

C# 当我按下WindowsLogs+;时,ContextMenustrip不会自动关闭;D,c#,.net,winforms,contextmenustrip,C#,.net,Winforms,Contextmenustrip,我的应用程序中有名为“cmsView”的contextmenustrip。当我右键单击鼠标按钮时,cmsView已打开,并单击应用程序中cmsView关闭的某些位置。 如果我打开cmsView并按Windowslogo+D(即最小化应用程序),并且每当我单击应用程序中的某些内容并失去焦点时,cmsView不会关闭且处于打开状态 如何解决这个问题 问候,, Tanya这不是应用程序或控件中的错误。如果说有什么问题的话,那就是Windows中的弹出菜单控件存在缺陷,WinForms控件实际上是在模仿

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

如何解决这个问题

问候,,
Tanya

这不是应用程序或控件中的错误。如果说有什么问题的话,那就是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); 
} 

谢谢你。。但是有什么办法可以解决这个问题吗?即手动关闭contextmenustripThanks cody gray。。我知道怎么处理这件事。。感谢you@Tanya,如果它回答了您的问题,您应该将其标记为答案。
protected override void WndProc(ref Message m){if(m.Msg==WM_MENUCHAR){if(m.WParam.ToInt64()==MF_SYSMENU){if(cmsView!=null)cmsView.Close()}base.WndProc(ref m);}
我使用了上面的代码,当我按下WindowsLogo键时,除了窗口被最小化外,什么都没有发生。@Tanya:问题是你正在检查
MF\U系统菜单
,它与上下文菜单不同。这是通过单击应用程序标题栏中的图标获得的窗口或系统菜单。此外,除非您使用的是
ContextMenu
类(而不是
ContextMenuStrip
类),否则将不会收到
WM\u MENUCHAR
消息
ContextMenuStrip
不是Win32 API菜单上的包装器。这些都是完全用.NET代码绘制的。