Winforms 弹出窗口和上下文菜单

Winforms 弹出窗口和上下文菜单,winforms,winapi,popup,Winforms,Winapi,Popup,我使用ToolStripDropDown将用户控件作为弹出窗口宿主。问题是,当从该弹出窗口中显示关联菜单条时,该弹出窗口本身在关联菜单打开时关闭。 我尝试将ContextMenuStrip子类化,并将WS_EX_NOACTIVATE添加到CreateParams中,但没有任何更改。首先,我认为没有办法做到这一点,因为这是常见的行为,但后来我尝试将TextBox类放到弹出式用户控件上,并调用编辑控件上下文菜单,而父弹出式窗口没有关闭。 我错过了什么?也有类似的问题。在我的UserControll上

我使用ToolStripDropDown将用户控件作为弹出窗口宿主。问题是,当从该弹出窗口中显示关联菜单条时,该弹出窗口本身在关联菜单打开时关闭。 我尝试将ContextMenuStrip子类化,并将WS_EX_NOACTIVATE添加到CreateParams中,但没有任何更改。首先,我认为没有办法做到这一点,因为这是常见的行为,但后来我尝试将TextBox类放到弹出式用户控件上,并调用编辑控件上下文菜单,而父弹出式窗口没有关闭。
我错过了什么?

也有类似的问题。在我的UserControll上有一个工具条。当我按下ToolsStripDropDown按钮时,显示了下拉列表,但弹出窗口消失了。 原因是弹出。自动关闭是正确的。设置为false后,弹出窗口不再关闭

        ToolStripDropDown popup = new ToolStripDropDown();
        popup.AutoClose = false;         //Set to FALSE
        popup.Margin = Padding.Empty;
        popup.Padding = Padding.Empty;
        ToolStripControlHost host = new ToolStripControlHost(userControl1);
        host.Margin = Padding.Empty;
        host.Padding = Padding.Empty;
        popup.Items.Add(host);
        popup.Show(button1, new Point(100,100));

我也有同样的问题。在我的UserControll上有一个工具条。当我按下ToolsStripDropDown按钮时,显示了下拉列表,但弹出窗口消失了。 原因是弹出。自动关闭是正确的。设置为false后,弹出窗口不再关闭

        ToolStripDropDown popup = new ToolStripDropDown();
        popup.AutoClose = false;         //Set to FALSE
        popup.Margin = Padding.Empty;
        popup.Padding = Padding.Empty;
        ToolStripControlHost host = new ToolStripControlHost(userControl1);
        host.Margin = Padding.Empty;
        host.Padding = Padding.Empty;
        popup.Items.Add(host);
        popup.Show(button1, new Point(100,100));

实际解决方案应为Martin最后评论中的解决方案: 使用ContextMenu而不是ContextMenuStrip
这一点对我很有用,当右键单击其中一个内容控件时,ToolStripDropDown不再自动关闭,就像它应该关闭一样。我们仍然需要它来自动关闭,在ToolStripDropDown上禁用自动关闭会做坏事,它应该在失去焦点时关闭。示例:打开任何其他应用程序窗口,ToolStripDropDown将继续显示在顶部

实际解决方案应为Martin最后评论中的解决方案: 使用ContextMenu而不是ContextMenuStrip
这一点对我很有用,当右键单击其中一个内容控件时,ToolStripDropDown不再自动关闭,就像它应该关闭一样。我们仍然需要它来自动关闭,在ToolStripDropDown上禁用自动关闭会做坏事,它应该在失去焦点时关闭。示例:打开任何其他应用程序窗口,ToolStripDropDown将继续显示在顶部

我有点不明白你在问什么。我理解在ToolStripDropDown中托管用户控件的概念。我不确定的是弹出窗口和上下文菜单是如何工作的。请再来点鹿?或者一些代码?我正在以本文所述的方式使用ToolStripDropDown:。hosted UserControl将ContextMenuStrip属性设置为上下文菜单,该菜单在鼠标右键单击时显示,但ToolStripDropDown弹出窗口在显示上下文菜单时关闭。我刚刚发现了一个神秘的东西。当我使用ContextMenuStrip时,它的激活会关闭父ToolStripDropDown,但当我使用ContextMenu时,它不会关闭。这两门课有什么区别?我有点搞不懂你在问什么。我理解在ToolStripDropDown中托管用户控件的概念。我不确定的是弹出窗口和上下文菜单是如何工作的。请再来点鹿?或者一些代码?我正在以本文所述的方式使用ToolStripDropDown:。hosted UserControl将ContextMenuStrip属性设置为上下文菜单,该菜单在鼠标右键单击时显示,但ToolStripDropDown弹出窗口在显示上下文菜单时关闭。我刚刚发现了一个神秘的东西。当我使用ContextMenuStrip时,它的激活会关闭父ToolStripDropDown,但当我使用ContextMenu时,它不会关闭。这两门课有什么不同?