2010-02-18 2 views
7

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

+0

Winform или webform? –

+0

Вы можете немного подробнее рассказать. Является ли это WPF, Windows Forms или какой-либо другой пользовательский интерфейс? – mattythomas2000

ответ

12

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

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

Это была моя первая мысль. Однако вы все равно можете ввести текст элемента в ComboBox и тем самым выбрать неэлектируемый элемент. –

+1

№ В моем случае я использую стиль DropDownList для отключения текстового редактора ComboBox. – symantis

+0

Ваш код очень хорошо, и это помогает мне. Но другой вопрос - как отключить не только выбор элементов в списке, но и отключить отслеживание неизбираемых элементов мышью. – symantis

0

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

Смежные вопросы