Nachdem ich immer wieder mal gefragt werde wie man auf einfache weise enum Werte an Controls binden kann, hier unter dem Motto kurz und bündig ein Beispiel in C#.
Um die Werte eines Aufzählung’s Typs (enum) an eine ComboBox (oder auch andere Controls die eine DataSource Eigenschaft zur Verfügung stellen) zu binden genügt nachfolgender Code:
Hier ein Beispiel mit eigenem enum (funktioniert natürlich auch mit System Typen)
public enum AppHeightDrawMode { TrueHeightAll = 0, FullHalfHourBlocksAll = 1, EndHalfHourBlocksAll = 2, FullHalfHourBlocksShort = 3, EndHalfHourBlocksShort = 4, } comboBox1.DataSource = Enum.GetValues(typeof(AppHeightDrawMode));
Das Resultat sieht dann so aus:
Super Beispiel :-).
Wie kann ich denn die Combobox (die ID) wieder auslesen?
Also den Wert auslesen geht so:
TMyEnum enum1 = (TMyEnum)combobox1.SelectedIndex;
Ist das mit dem SelectedIndex aber (als allgemeine Lösung) nicht gefährlich, ich kann den Enums ja schließlich auch beliebige Werte vergeben und Lücken lassen und alles…
Besser: SelectedValue verwenden!
sth_Weird
wie kann ich die enums übersetzen? also dass in der combobox meine eigenen texte stehen, aber nach der auswahl der enum-wert zurückgegeben wird?
Ist das nicht das gleiche was ich hier im Beitrag bereits verlinkt habe
Zum auslesen des Values würde sich das eher anbieten:
int ValueNumber = (int)((AppHeightDrawMode)comboBox1.SelectedItem);
Ist universeller, wenn der Index ungleich dem Value ist.
Dies funktioniert wunderbar.
Was wenn zum Beispiel die MessageBoxButton zurückgegeben werden sollte?
Die nicht forlaufende Nummer enthält!
geht noch einfacher:
AppHeightDrawMode myAppMode = (AppHeightDrawMode)comboBox1.SelectedItem;