如何将控件放在 Windows 表单中的临时层

How to put control in temporary layer in Windows Forms

我创建了自己的用户控件。当我单击表单上的某个按钮时,我想显示我的用户控件。但是 我不希望它永久显示 像这样:

uc.Visible = true;

然后再次隐藏:

uc.Visible = false;

我希望我的用户控件的行为类似于上下文菜单。当我右键单击某个内容时,会显示我的上下文菜单,然后 我不关心如何隐藏我的上下文菜单。自动隐藏:

如何为我的用户控件实现此行为?

它有点难看,但我从 ToolStripDropDown 继承了一些成功,然后通过 ToolStripControlHost 包含任意内容。将您的内容(UserControl、Panel 或其他一些容器)传递给 ToolStripControlHost 的构造函数并将其添加到 ToolStripDropDown.Items.

丑陋的两部分是:

  • 它可能无法很好地自动调整自身大小,因此请准备好自己处理大小调整。最简单的方法是将 ToolStripDropDownMinimumSizeMaximumSize 设置为内容的大小。此外,用户也没有内置的方法来调整 window 的大小,因此如果需要,您也必须实现它。
  • 某些控件在 ToolStripDropDown 中表现不佳。一旦他们把焦点放在你在别处点击的整个东西上,它就会消失。例如 ComboBoxDateTimePicker。您可以通过在 内部 class System.Windows.Forms.ToolStripManager+ModalMenuFilter 上调用 SuspendMenuModeResumeMenuMode 来解决这个问题。您将需要找到此类型并使用反射调用这两个方法。

以下资源可能会有额外帮助: