使用不可选项创建WinForms ComboBox

时间:2010-02-18 17:06:47

标签: c# .net winforms combobox

如何使用不可选择的项目创建组合框控件?例如,可以将下拉列表中的项目直观地划分为某些组或类别的组名或类别名称。

2 个答案:

答案 0 :(得分:13)

您可以添加一个特殊的类并使用所选项来确定是否选择了该项,而不是在组合框中添加字符串。

public partial class Form1 : Form
{
    private class ComboBoxItem
    {
        public int Value { get; set; }
        public string Text { get; set; }
        public bool Selectable { get; set; }
    }

    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        this.comboBox1.ValueMember = "Value";
        this.comboBox1.DisplayMember = "Text";
        this.comboBox1.Items.AddRange(new[] {
            new ComboBoxItem() { Selectable = false, Text="Unselectable", Value=0},
            new ComboBoxItem() { Selectable = true, Text="Selectable1", Value=1},
            new ComboBoxItem() { Selectable = true, Text="Selectable2", Value=2},
            new ComboBoxItem() { Selectable = false, Text="Unselectable", Value=3},
            new ComboBoxItem() { Selectable = true, Text="Selectable3", Value=4},
            new ComboBoxItem() { Selectable = true, Text="Selectable4", Value=5},
        });

        this.comboBox1.SelectedIndexChanged += (cbSender, cbe) => {
            var cb = cbSender as ComboBox;

            if (cb.SelectedItem != null && cb.SelectedItem is ComboBoxItem && ((ComboBoxItem) cb.SelectedItem).Selectable == false) {
                // deselect item
                cb.SelectedIndex = -1;
            }
        };
    }
}

答案 1 :(得分:0)

CodeProject上查看一个只读组合框,这是另一篇文章,让readonly组合框'正常'看起来......这是另一篇展示如何覆盖基本标准组合的文章如Sani建议的那样使readonly成为一个盒子。