Forum: PC-Programmierung C#: Enum und ComboBox


von Benno (Gast)


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

von Markus V. (valvestino)


Lesenswert?

Benno schrieb:
> Was mache ich falsch?

Es fehlten ein paar Zeilen Sourcecode. ;-)

Gruß
Markus

von Benno (Gast)


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
        }

von Markus V. (valvestino)


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

von Markus V. (valvestino)


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

von Jürgen G. (jrgen_g)


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

von Markus V. (valvestino)


Lesenswert?

Jürgen Gehrig schrieb:
> da Du mit Enum.GetNames die Namen abrufst

Tja, da war mein 2. Post wohl doch richtig und in meinem 3. habe ich 
mich nur auf's Beispiel verlassen... %-)

Gruß
Markus

von Benno (Gast)


Lesenswert?

Ups, wie peinlich...

Ok. Korrigiert und es geht. - Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.