我正在购买下拉列表控件,允许我选择多个项目。类似于CheckedListbox的东西,但是在下拉列表表单中(我不希望它占据屏幕的一大块)。在这一点上,我非常相信内置的.NET没有这样的控件。
注意这是Winforms,而不是ASP.NET。有什么建议吗?
答案 0 :(得分:23)
在CodeProject上查看这个项目:
答案 1 :(得分:7)
还有另一种解决办法:
上述解决方案是正确的,以解决第一个问题,它需要两次单击才能进入复选框列表,但是,当您单击控件退出它时,这会引入一个新问题,它会保留焦点,您必须双击去另一个控制。我能用以下代码解决这个问题:
在CheckBoxComboBox.cs中添加以下覆盖:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
}
根据Rob P.的回答和这个答案,它不会关注任何点击事件。
答案 2 :(得分:1)
您应该再次显示下拉表单,因为下面的代码将关闭它。
Works的代码是:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
this.dropdown.Show(this);
}
答案 3 :(得分:1)
这是从UI角度来看对我更有效的另一种解决方案,我发现UI更加精致,代码更易于使用/理解:
https://www.codeproject.com/Articles/31105/A-ComboBox-with-a-CheckedListBox-as-a-Dropdown
请注意,为避免出现双击问题,需要进行一些修复。从Herrpel报价(17年5月9日)
将此添加到外部类CheckedComboBox
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
DroppedDown = false;
}
,并且由于Windows 10不再关注关闭框的问题,请更改CloseDropdown
中的代码:
来自
ccbParent.Focus();
this.Hide();
到
ccbParent.BeginInvoke(new MethodInvoker(() => this.Hide()));