mikrocontroller.net

Forum: PC-Programmierung C#: Enum und ComboBox


Autor: Benno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benno schrieb:
> Was mache ich falsch?

Es fehlten ein paar Zeilen Sourcecode. ;-)

Gruß
Markus

Autor: Benno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darn soll es nicht scheitern:
        enum FormatType
        {
            Quadratisch,
            RechteckigH,
            RechteckigB
        }

        public MainWindow()
        {
            InitializeComponent();
            comboBox_format.DataSource = Enum.GetNames(typeof(FormatType));
        }

        private void Format(string text, FormatType formattype)
        {
            ...
        }

        private void textBox_input_TextChanged(object sender, EventArgs e)
        {
            Format(textBox_input.Text, (FormatType)comboBox_format.SelectedItem);
        }

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht 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:
   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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen Gehrig (jrgen_g)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um aus einem Text wieder den Enum-Wert zu bekommen gibt es die 
Parse-Methode:
(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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, wie peinlich...

Ok. Korrigiert und es geht. - Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.