我知道Windows Combobox
控件只不过是a Textbox
and a ListBox
glued together。
我需要在WinForms中模拟相同的东西。我试图找出必须设置以实现正确效果的Windows窗口选项。
到目前为止,我所管理的最好的是创造
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中创建“下拉”表单 - 内容可能与上面的截图不同:
答案 0 :(得分:4)
使用ToolStripControlHost
和ToolStripDropDown
可以达到同样的效果。
来自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