gpt4 book ai didi

c# - 如何在WinForms中模拟下拉窗口?

转载 作者:太空狗 更新时间:2023-10-29 23:25:38 24 4
gpt4 key购买 nike

我知道 Windows Combobox 控件不过是 a Textbox and a ListBoxglued together .

我需要在 WinForms 中模拟同样的事情。我正在尝试找出必须设置的 Windows 窗口选项才能达到正确的效果。

  • 下拉列表不能是 child window - 否则它被剪裁到 parent 的区域
  • 概念上它必须是 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();
}

这种乱七八糟的组合运作得很好......

enter image description here

...除了“下拉”将焦点从所有者表单上移开。

这是我的问题,我的弹出窗口应该有什么属性?

但是当它失去焦点时我如何隐藏我的下拉表单 - 当它不能失去焦点时


我如何在 .NET 中模拟组合框下拉列表?


注意:不要将您在示例屏幕截图中看到的内容与其他内容混淆。我在问如何在 Winforms 中创建“下拉”表单 - 内容可能与上面的屏幕截图不同:

enter image description here

最佳答案

使用 ToolStripControlHostToolStripDropDown 可以达到同样的效果。

来自 this answer :

Private Sub ShowControl(ByVal fromControl As Control, ByVal whichControl As Control)
'\\ whichControl needs MinimumSize set:'
whichControl.MinimumSize = whichControl.Size

Dim toolDrop As New ToolStripDropDown()
Dim toolHost As New ToolStripControlHost(whichControl)
toolHost.Margin = New Padding(0)
toolDrop.Padding = New Padding(0)
toolDrop.Items.Add(toolHost)
toolDrop.Show(Me, New Point(fromControl.Left, fromControl.Bottom))
End Sub

关于c# - 如何在WinForms中模拟下拉窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com