我正在寻找一种下拉列表控件,可以允许我选择多个项目。类似于CheckedListBox,但是以下拉列表形式展示(我不希望它占据屏幕的大块空间)。目前我很确定在.NET中没有这样的内置控件。
请注意,这是Winforms,而不是ASP.NET。有什么建议吗?
请查看CodeProject上的这个项目:
还有一种修复方法:
上面的解决方案可以解决第一个问题,使单击两次才能进入复选框列表的问题,但是它引入了一个新问题,当单击控件以退出它时,它会保留焦点,您必须双击才能转到另一个控件。我使用以下代码解决了这个问题:
在CheckBoxComboBox.cs中添加以下重写:
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
}
结合 Rob P. 的答案和这个答案,它不会在任何点击事件上保持焦点。
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.Parent.Focus();
this.dropDown.Show(this);
}
this.dropDown.Show(this)
会导致一些意外的副作用,例如滚动条需要额外的点击或关闭。 - rboyprotected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
DroppedDown = false;
}
针对Windows 10关闭框失去焦点的问题,需要更改CloseDropdown
中的代码:
ccbParent.Focus();
this.Hide();
to
ccbParent.BeginInvoke(new MethodInvoker(() => this.Hide()));
中,将
ShowDropDown()替换为
BeginInvoke(new MethodInvoker(ShowDropDown))`。这使得焦点对我有效,现在感觉不错了。 - Christian