弹出窗口和上下文菜单

Posted

技术标签:

【中文标题】弹出窗口和上下文菜单【英文标题】:Popup window and context menu 【发布时间】:2010-02-23 20:07:24 【问题描述】:

我正在使用 ToolStripDropDown 将用户控件作为弹出窗口托管。问题是当从这个弹出窗口中显示上下文菜单条时,弹出窗口本身会在上下文菜单打开的那一刻关闭。 我试图继承 ContextMenuStrip 并将 WS_EX_NOACTIVATE 添加到 CreateParams 但没有任何改变。首先我认为没有办法做到这一点,因为这是常见的行为,但后来我尝试将一个 TextBox 类放在弹出用户控件上并调用编辑控件上下文菜单 - 并且父弹出窗口没有关闭. 我错过了什么?

【问题讨论】:

我对你在问什么感到有点困惑。我了解在 ToolStripDropDown 中托管 UserControl 的概念。我不确定是如何工作的。请问更多的deets?还是一些代码? 我正在按照本文所述的方式使用 ToolStripDropDown:codeproject.com/KB/menus/SuperContextMenu.aspx。托管的 UserControl 将 ContextMenuStrip 属性设置为在鼠标右键单击时显示的上下文菜单,但 ToolStripDropDown 弹出窗口在显示上下文菜单的那一刻关闭。 我刚刚发现了一个神秘的东西。当我使用 ContextMenuStrip 时,它的激活会关闭父 ToolStripDropDown,但是当我使用 ContextMenu 时它不会。这两个类有什么区别? 【参考方案1】:

有一个类似的问题。在我的 UserControll 上有一个工具条。当我按下工具条下拉按钮时,下拉菜单显示,但弹出窗口消失了。 原因是 popup.Autoclose 是真的。设置为 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));

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于弹出窗口和上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

使用导航弹出窗口时忽略Webstorm中的node_modules

禁用主窗口的标题上下文菜单

Win API - 无法向窗口添加弹出菜单和图标

右键单击visjs中的节点(contextmenu)打开扩展弹出窗口(html列表)

android的这种弹出菜单(窗口)怎么实现

visual studio 2010 C++,怎么通过点击主窗口上一个按钮控件,弹出一个类似于主窗口的窗口?