Создать WinForms ComboBox с невыбираемыми элементами - PullRequest
8 голосов
/ 18 февраля 2010

Как создать комбинированный элемент управления с невыбираемыми элементами? Например, такие имена групп или категорий, которые визуально разделяют элементы в раскрывающемся списке на несколько групп или категорий.

Ответы [ 2 ]

13 голосов
/ 18 февраля 2010

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

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;
            }
        };
    }
}
0 голосов
/ 18 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...