Создайте WinForms ComboBox с невыбираемыми объектами

Как создать управление полем комбинированного списка с невыбираемыми объектами? Например, такой groupnames или categorynames, которые визуально делят объекты на dropdownlist в некоторые группы или категории.

8
задан John Saunders 27 August 2010 в 23:59
поделиться

2 ответа

Вместо добавления строк в поле со списком вы можете добавить специальный класс и использовать выбранный элемент, чтобы определить, выбран этот элемент или нет.

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;
            }
        };
    }
}
13
ответ дан 5 December 2019 в 12:57
поделиться

Посмотрите здесь на CodeProject поле со списком только для чтения, вот еще одна статья, чтобы сделать поле со списком только для чтения "приличным" ... Вот еще одно, которое показывает, как переопределить базовое стандартное поле со списком, чтобы сделать его только для чтения , как предложил Сани.

0
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: