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
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 | }
|
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.