2010-02-18 13 views
7

Wie erstellt man Combobox-Steuerelement mit nicht auswählbaren Elementen? Zum Beispiel solche Gruppennamen oder Kategorienamen, die Elemente in der Dropdownliste visuell in einige Gruppen oder Kategorien aufteilen.WinForms ComboBox mit nicht auswählbaren Elementen erstellen

+0

Winform oder Webformular? –

+0

Sie können ein bisschen mehr Details geben. Ist dies WPF, Windows Forms oder ein anderes UI-Framework? – mattythomas2000

Antwort

12

Anstatt Zeichenfolgen zu Ihrer Combobox hinzuzufügen, können Sie eine spezielle Klasse hinzufügen und das ausgewählte Element verwenden, um zu bestimmen, ob das Element ausgewählt ist oder nicht.

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

Das war mein erster Gedanke. Sie können jedoch den Elementtext immer noch in die ComboBox eingeben und dadurch das nicht auswählbare Element auswählen. –

+1

Nein. In meinem Fall verwende ich DropDownList Stil für ComboBox deaktivieren Texteditor. – symantis

+0

Ihr Code ist sehr gut und es hilft mir. Aber eine andere Frage - wie zu deaktivieren nicht nur die Auswahl von Elementen in der Liste, deaktivieren Sie die Verfolgung nicht auswählbarer Elemente mit der Maus. – symantis

0

Werfen Sie einen Blick hier auf CodeProject für eine Nur-Lese-Combo-Box, hier ist ein weiterer Artikel des readonly Kombinationsfeld ‚anständig‘ zu machen sucht ... Hier ist eine andere, die zeigen, wie Sie das grundlegende Standard-Kombinationsfeld außer Kraft zu setzen, es zu machen readonly wie Sani vorgeschlagen.

Verwandte Themen