Enum Index ...
-
Morgen Leute ...
Versuche gerade mein Program etwas flexibler zu machen.
public enum enumFachbereiche { Backwaren = 1, Konfekt = 2, Rohstoffe = 3, Schokolade = 4, Sonstiges = 5, Technik = 6, Zuckerwaren = 7 };
In diesem Programm verteilt gibt es verschiedene ComboBoxen die mit Hilfe des Enums gefüllt werden sollen. Klappt auch.
In einem bestimmten Abschnitt des Programms möchte ich jetzt über eine ComboBox auf das SelectedIndexChanged Event reagieren:
private void FachbereichAuswahlComboBox_SelectedIndexChanged(object sender, EventArgs e) { /*laut Enum Fachbereiche im Hauptprogramm - so war es ursprünglich ohne Enum im Hauptprogramm switch (FachbereichAuswahlComboBox.SelectedIndex) { case 0: IHauptprogramm.IBenutzerInfo.activeFachbereich = 0; break; case 1: IHauptprogramm.IBenutzerInfo.activeFachbereich = 1; break; case 2: IHauptprogramm.IBenutzerInfo.activeFachbereich = 2; break; case 3: IHauptprogramm.IBenutzerInfo.activeFachbereich = 3; break; case 4: IHauptprogramm.IBenutzerInfo.activeFachbereich = 4; break; case 5: IHauptprogramm.IBenutzerInfo.activeFachbereich = 5; break; case 6: IHauptprogramm.IBenutzerInfo.activeFachbereich = 6; break; case 7: IHauptprogramm.IBenutzerInfo.activeFachbereich = 7; break; case 8: IHauptprogramm.IBenutzerInfo.activeFachbereich = 8; break; } * */ if (FachbereichAuswahlComboBox.Text == "[Gemischt]") IHauptprogramm.IBenutzerInfo.activeFachbereich = 0; else { } }
In dieser bestimmten ComboBox wird noch ein weiteres Item [Gemischt] hinzugefügt, also nicht verwirren lassen.
Wenn nun der ausgewählte Text in der Combo "Schokolade" ist, wie bekomme ich den passenden Index aus dem Enum ?
Danke schonmal ...
-
So ganz verstehe ich dein Problem jetzt nicht.
Allein den auskommentierten Code kann man ja zu:IHauptprogramm.IBenutzerInfo.activeFachbereich = FachbereichAuswahlComboBox.SelectedIndex;
verkürzen (warum du da eine switch-Anweisung programmiert hast, ist mir wirklich schleierhaft, aber vllt. ist das ja auch nur ein Ausschnitt aus deinem gesamten Code?)
Du hast also verschiedene Comboboxen (zu jedem 'enumFachbereiche' also eine)?
Erzeuge dir einfach ein Array und greife dann auf diesen mittels des Enums zu.Und du brachst doch gar nicht über den ComboBox-Text zuzugreifen, sondern einfach über den SelectedIndex (wie in meinem Code oben) und diesen 'castest' du dann einfach in den Enum-Wert:
enumFachbereiche fachbereich = (enumFachbereiche)FachbereichAuswahlComboBox.SelectedIndex;
Und für den allgemeinen Fall, einen Enum aus einem String zu erstellen, gibt es die Methode: Enum.Parse(Type, String).
P.S. Ein Enum sollte in der Einzahl benannt sein, d.h. einfach "Fachbereich", denn ein Variable davon umfaßt ja nur genau einen aus der Aufzählung.
-
Es gibt in den verschiedenen Abschnitten des Programms verschiedene Comboboxen, welche jeweils aus Auswahl für den Fachbereich dienen.
Nur in einem "speziellen" Programmabschnitt füge ich der Combobox ein neues Element "[Gemischt]" hinzu, welches dann auf Index 0 steht.
Selected Index würde hierbei doch Index 0 zurückgeben, welchen es aber laut Enum gar nicht gibt.
Aber bestimmt hast du recht. Ich seh den Faden nur nicht.
-
Hallo Shaun (das Schaf -)
also soviel Mathematik traue ich dir doch noch zu (ok, ich muß zugeben, ich habe nicht gesehen, daß deine Enum-Werte bei 1 anstatt 0 anfangen).
Also entweder die Enum-Werte bei 0 anfangen lassen oder aber +/-1 rechnen!
Und für den "Gemischt"-Fall dann entsprechend den Index-Wert berechnen...
-
Hast ja recht ... bin nur nen einfacher Konditor ...