【问题标题】: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 时它不会。这两个类有什么区别?

标签: winforms winapi popup


【解决方案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 将继续出现在顶部

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多