C#: Enum und ComboBox

Gast #2095398
Lesenswert?

Hallo!

Habe wie in diesem Beispiel beschrieben meine Enumeration einer Combobox 
hinzugefügt:
http://www.blackwasp.co.uk/BindComboBoxToEnum.aspx
Die Elemente werden in der ComboBox angezeigt.

Nur das zurückcasten (aus dem selektierten Combobox-Element wieder eine 
Enum machen) klappt nicht! Visual Studio meldet nur "Die angegebene 
Umwandlung ist ungültig."

Was mache ich falsch?

Gruß
Benno
Gast #2095438
Lesenswert?

Darn soll es nicht scheitern:
1
        enum FormatType
2
        {
3
            Quadratisch,
4
            RechteckigH,
5
            RechteckigB
6
        }
7

8
        public MainWindow()
9
        {
10
            InitializeComponent();
11
            comboBox_format.DataSource = Enum.GetNames(typeof(FormatType));
12
        }
13

14
        private void Format(string text, FormatType formattype)
15
        {
16
            ...
17
        }
18

19
        private void textBox_input_TextChanged(object sender, EventArgs e)
20
        {
21
            Format(textBox_input.Text, (FormatType)comboBox_format.SelectedItem);
22
        }
#2095464
Lesenswert?

Zunächst würde ich mal raten, der Fehler kommt zur Laufzeit Deines 
Programmes? In diesem Fall wäre der nächste Schritt, mal in folgender 
Zeile einen Haltepunkt zu setzen und den Debugger anzuwerfen:
1
   Format(textBox_input.Text, (FormatType)comboBox_format.SelectedItem);

Im Debugger schaust Du Dir dann mal an, welchen Typ das Objekt hat, das 
das Property SelectedItem zurückliefert. Ich würde mal stark vermuten, 
das es ein String ist. Der lässt sich nicht über einen einfachen Cast in 
einen Enum-Wert wandeln. Das müsstest Du mit System.Enum.TryParse (.NET 
4.0) oder System.Enum.Parse (bis .NET 3.5) machen.

Gruß
Markus
#2095484
Lesenswert?

Ich habe nochmal genauer die Doku zu Enum.GetValues() angeschaut. Mit 
der Behauptung, das das SelectedValue-Objekt wahrscheinlich ein String 
ist, bin ich mir nicht mehr sicher.

Was funktionieren könnte ist, wenn Du SelectedValue mit 
Convert.ToInt32() vorher in einen int wandelst.

Gruß
Markus
#2095492
Lesenswert?

Um aus einem Text wieder den Enum-Wert zu bekommen gibt es die 
Parse-Methode:
1
(FormatType)Enum.Parse(typeof(FormatType), comboBox_format.SelectedItem);

Der Code geht davon aus, dass 'SelectedItem' als String zurück kommt, 
was bei Dir auch der Fall sein dürfte da Du mit Enum.GetNames die Namen 
abrufst. Bei dem Beispiel auf welches Du verlinkt hast, wird aber mit 
Enum.GetValues die Werte der Enumeration abgerufen. Ergo wird Dein 
SelectedItem in dem Fall zu Integer, und Integer lässt sich direkt in 
die Enum casten.

Merke : Wenn man schon Code abtippt, sollte man auch ganz genau darauf 
achten das man das fehlerfrei tut :-)

Gruß
  Jürgen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren