2010-02-18 14 views
7

Come creare il controllo della casella combinata con elementi non selezionabili? Ad esempio, tali nomi di gruppo o nomi di categoria che dividono visivamente gli elementi nell'elenco a discesa in alcuni gruppi o categorie.Creazione di ComboBox WinForms con elementi non selezionabili

+0

Winform o webform? –

+0

Puoi dare un po 'più di dettaglio. Questo WPF, Windows Form o qualche altro framework UI? – mattythomas2000

risposta

12

Invece di aggiungere stringhe alla casella combinata, è possibile aggiungere una classe speciale e utilizzare l'elemento selezionato per determinare se l'elemento è selezionato o meno.

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

Questo è stato anche il mio primo pensiero. Tuttavia è ancora possibile digitare il testo dell'elemento nel ComboBox e quindi selezionare l'elemento non selezionabile. –

+1

No. Nel mio caso uso lo stile DropDownList per ComboBox che disabilita texteditor. – symantis

+0

Il tuo codice è molto buono e mi aiuta. Ma un'altra domanda: come disabilitare non solo la selezione degli elementi nell'elenco, ma disabilitare il tracciamento degli oggetti non selezionabili con il mouse. – symantis

0

Date un'occhiata qui su CodeProject per una sola lettura Casella combinata, ecco un altro articolo per rendere la casella readonly combinata 'decente' cercando ... Ecco un altro che mostra come sovrascrivere la casella standard di base combinata per renderlo readonly come suggerito da Sani.

Problemi correlati