Moin Leute,
in einer ComboBox sind mehrere Sorten von Items, zwischen beiden sollte im aufgeklappten Zustand ein Separator sichtbar sein, der aber im
Ownerdrawing wollte ich nicht, weil da die Property
Dass Enums verwendet werden, ist nicht von Belang, hier dient es der Bequemlichkeit.
Im
So ist gesichert, dass die Separatoren nicht selektiert werden können.
Der
String, der bei den Separatoren steht, ist hier als Überschrift
gedacht, Ihr könnt da natürlich reinschreiben was Ihr wollt oder die
Items einfach leer lassen.OK, hier der Code, Form mit ComboBox und Label:
C#
VB.NET
Also dann: Gute Separierung.
in einer ComboBox sind mehrere Sorten von Items, zwischen beiden sollte im aufgeklappten Zustand ein Separator sichtbar sein, der aber im
SelectedIndexChanged
-Event nichts anstellt.Ownerdrawing wollte ich nicht, weil da die Property
.DropDownStyle = ComboBoxStyle.DropDownList
schlecht darzustellen ist.Dass Enums verwendet werden, ist nicht von Belang, hier dient es der Bequemlichkeit.
Im
SelectedIndexChanged
-Event werden die Separatoren abgefragt und, je nach dem, wo die letzte Selektion lag, das wird in der Variable LastItem
gespeichert, wird das Item davor oder danach ausgewählt.So ist gesichert, dass die Separatoren nicht selektiert werden können.
Der
String, der bei den Separatoren steht, ist hier als Überschrift
gedacht, Ihr könnt da natürlich reinschreiben was Ihr wollt oder die
Items einfach leer lassen.OK, hier der Code, Form mit ComboBox und Label:
C#-Quellcode
- using System;
- using System.Windows.Forms;
- namespace ComboBoxSeparator
- {
- public partial class Form1 : Form
- {
- private enum ComboItems
- {
- Item1,
- Item2,
- Item3,
- Separator1,
- Item4,
- Item5,
- Item6,
- Separator2,
- Item7,
- Item8,
- Item9,
- Last,
- }
- /// <summary>
- /// letzter selektierter Index für das ComboBox-Separator-Handling
- /// </summary>
- private int LastItem = -1;
- public Form1()
- {
- this.InitializeComponent();
- // für jedes Item eine Zeile, Separatoren bekommen eine andere Zeile
- for (ComboItems item = ComboItems.Item1; item < ComboItems.Last; item++)
- {
- if (item == ComboItems.Separator1)
- {
- this.comboBox1.Items.Add("- Separator 1");
- }
- else if (item == ComboItems.Separator2)
- {
- this.comboBox1.Items.Add("- Separator 2");
- }
- else
- {
- this.comboBox1.Items.Add(item.ToString());
- }
- }
- }
- private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
- int index = this.comboBox1.SelectedIndex;
- ComboItems item = (ComboItems)index;
- if (item == ComboItems.Separator1 ||
- item == ComboItems.Separator2)
- {
- if (this.LastItem < index)
- {
- // das nächste Item selektieren
- this.comboBox1.SelectedIndex++;
- }
- else
- {
- // das letzte Item selektieren
- this.comboBox1.SelectedIndex--;
- }
- return;
- }
- this.LastItem = index;
- this.label1.Text = item.ToString();
- }
- }
- }
VB.NET-Quellcode
- Public Class Form1
- Private Enum ComboItems
- Item1
- Item2
- Item3
- Separator1
- Item4
- Item5
- Item6
- Separator2
- Item7
- Item8
- Item9
- Last
- End Enum
- ''' <summary>
- ''' letzter selektierter Index für das ComboBox-Separator-Handling
- ''' </summary>
- Private LastItem As Integer = -1
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ' für jedes Item eine Zeile, Separatoren bekommen eine andere Zeile
- For i = CInt(ComboItems.Item1) To CInt(ComboItems.Last) - 1
- Dim item As ComboItems = CType(i, ComboItems)
- If item = ComboItems.Separator1 Then
- Me.ComboBox1.Items.Add("- Separator 1")
- ElseIf item = ComboItems.Separator2 Then
- Me.ComboBox1.Items.Add("- Separator 2")
- Else
- Me.ComboBox1.Items.Add(item.ToString())
- End If
- Next
- End Sub
- Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
- Dim index As Integer = Me.ComboBox1.SelectedIndex
- Dim item As ComboItems = CType(index, ComboItems)
- If item = ComboItems.Separator1 OrElse item = ComboItems.Separator2 Then
- If LastItem < index Then
- ' das nächste Item selektieren
- Me.ComboBox1.SelectedIndex += 1
- Else
- ' das letzte Item selektieren
- Me.ComboBox1.SelectedIndex -= 1
- End If
- Return
- End If
- LastItem = index
- Me.Label1.Text = item.ToString()
- End Sub
- End Class
Also dann: Gute Separierung.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!