Winforms - 多选下拉列表

时间:2010-06-25 13:04:35

标签: c# .net winforms

我正在购买下拉列表控件,允许我选择多个项目。类似于CheckedListbox的东西,但是在下拉列表表单中(我不希望它占据屏幕的一大块)。在这一点上,我非常相信内置的.NET没有这样的控件。

注意这是Winforms,而不是ASP.NET。有什么建议吗?

4 个答案:

答案 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()));