【发布时间】:2012-01-29 12:08:45
【问题描述】:
我知道 Windows Combobox 控件不过是 a Textbox and a ListBoxglued together。
我需要在 WinForms 中模拟相同的东西。我正在尝试找出必须设置的 Windows 窗口选项才能达到正确的效果。
- 下拉菜单不能是child window - 否则会被剪裁到父区域
- 从概念上讲,它必须是一个pop-up window - 一个重叠的窗口
- 它可以是owned window - 在 z 顺序中,拥有的窗口始终位于其所有者之上。当所有者被销毁时,系统会自动销毁拥有的窗口。拥有的窗口在其所有者最小化时被隐藏。
到目前为止我做过的最好的事情就是创造
- 无边界 (
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None) - 最上面 (
this.TopMost = true) - 任务栏中未显示的表单 (
this.ShowInTaskbar = false)
这个无边界的最顶层表单包含我的“下拉”控件。当下拉表单失去焦点时,我会“隐藏”我的下拉列表:
this.Deactivate += new EventHandler(TheDropDownForm_Deactivate);
void TheDropDownForm_Deactivate(object sender, EventArgs e)
{
...
this.Close();
}
这堆乱七八糟的东西效果很好......
...除了“下拉”将焦点从所有者表单上移开。
这是我的问题,我的弹出窗口应该具有哪些属性?
但是当它失去焦点时我如何隐藏我的下拉表单 - 当它不能失去焦点时?
如何在 .NET 中模拟组合框下拉菜单?
注意:不要将您在示例屏幕截图中看到的内容与其他内容混淆。我在问如何在 Winforms 中创建“下拉”表单 - 内容可能与上面的屏幕截图不同:
【问题讨论】:
-
我很好奇您在哪里/如何/为什么需要这样的东西?您可能需要考虑使用 WPF 控件(更容易操作,并且可以与 WinForms 一起使用)。
-
@HansPassant 从根本上说,这个答案不能为我服务,因为控件是“父母”。如果是父级,那么它将剪辑到它的父级(即“下拉菜单”可以存在于其“父级”表单之外)
-
你可以在这里找到另一个解决方案:stackoverflow.com/a/15305176/1522062
标签: c# winforms drop-down-menu