2010-02-18 20 views
7

¿Cómo crear un control de cuadro combinado con elementos no seleccionables? Por ejemplo, nombres de grupo o categoría que dividen visualmente los elementos de la lista desplegable en algunos grupos o categorías.Crear WinForms ComboBox con elementos no seleccionables

+0

¿Forma o formulario web? –

+0

Puede dar un poco más de detalle. ¿Es este WPF, Windows Forms o algún otro marco de interfaz de usuario? – mattythomas2000

Respuesta

12

En lugar de agregar cadenas a su cuadro combinado, puede agregar una clase especial y usar el elemento seleccionado para determinar si el elemento está seleccionado o no.

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

Este fue mi primer pensamiento también. Sin embargo, puede escribir el texto del elemento en el ComboBox y, por lo tanto, seleccionar el elemento no seleccionable. –

+1

No. En mi caso, uso el estilo DropDownList para que ComboBox deshabilite texteditor. – symantis

+0

Tu código está muy bien y me sirve. Pero otra pregunta: cómo desactivar no solo la selección de elementos en la lista, sino también desactivar el seguimiento de elementos no seleccionables con el mouse. – symantis

0

un vistazo aquí en CodeProject para un cuadro combinado de sólo lectura, aquí hay otro artículo para hacer la caja readonly combo 'decente' en busca ... Aquí hay otro que muestra cómo reemplazar la caja básica estándar combinado para que sea readonly como sugirió Sani.

Cuestiones relacionadas