如何在Windows窗体

时间:2017-11-07 06:42:53

标签: winforms user-controls contextmenu

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

uc.Visible = true;

然后再次隐藏它:

uc.Visible = false;

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

  • 当我点击某个按钮时,
  • 当我移动窗户时,
  • 当我的窗户失去焦点时
  • 等。

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

1 个答案:

答案 0 :(得分:0)

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

两个丑陋的部分是:

  • 它可能不会很好地自动调整,所以要准备好自己处理尺寸。最简单的方法是将MinimumSize的{​​{1}}和MaximumSize设置为内容的大小。此外,用户也没有内置的方式来调整窗口大小,因此如果需要,您还必须实现此功能。
  • 某些控件在ToolStripDropDown内的表现不佳。一旦他们把重点放在了你在其他地方点击的所有东西上它就会消失。示例包括ToolStripDropDownComboBox。您可以通过调用内部类 DateTimePicker上的SuspendMenuModeResumeMenuMode来解决此问题。您需要找到此类型并使用反射调用这两种方法。

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