2012-03-29 9 views
0
comboBox2.DataSource = Enum.GetValues(typeof(GSMModemTypeConstants)); 
GSMModemTypeConstants s_type = (GSMModemTypeConstants)Convert.ChangeType(
    comboBox2.Text, typeof(GSMModemTypeConstants)); 

In der ersten Zeile des Benutzer wählen, die Art seines Modems von einem comboBox, die die Liste des Modems zur Verfügung aus dem Enum GSMModemTypeConstants bekommt. In der zweiten Zeile möchte ich den ausgewählten Modemtyp an s_type übergeben, der später von der Methode verwendet wird, die die SMS tatsächlich sendet.Fehler von Convert.ChangeType bei der Umwandlung von „string“ auf „GSMModemTypeConstants“

Wenn ich manuell an die s_type alles zum Beispiel perfekt funktioniert:

GSMModemTypeConstants s_type = GSMModemTypeConstants.gsmModemSonyEricsson; 
// OR 
GSMModemTypeConstants s_type = GSMModemTypeConstants.gsmModemNokia; 

Aber wenn ich versuche, die Wahl vom comboBox abzurufen und stellen Sie die s_type wie ich in der zweiten Zeile tun die Umwandlung gibt mir eine Fehler, den ich nicht verstehen kann.

the error

Am Umgang ich die Convert.ChangeType Methode falsch? Wenn es nicht meine Schuld ist, gibt es dann eine andere Möglichkeit, einen Typ von String in etwas anderes zu konvertieren, außer Convert.ChangeType?


Lösung Ich habe noch nicht den erforderlichen Ruf es unten zu beantworten, hier so ist der Code ...

GSMModemTypeConstants s_type = (GSMModemTypeConstants)System.Enum.Parse(
    typeof(GSMModemTypeConstants), comboBox2.Text);` 
+1

möglich Duplikat [Convert.ChangeType und Aufzählungen Umwandlung?] (Http://stackoverflow.com/questions/507059/convert-changetype-and-converting-to-enums) – BrokenGlass

+0

"Enum.ToObject()" statt von "Convert.ChangeType" in der Zeile bekomme ich den Fehler? – Karapapas

+0

Wenn Sie eine Lösung für Ihr Problem haben, geben Sie bitte eine Antwort, damit die Leute die Antwort schneller finden. Es gibt keine Beschränkung für die Antwort. Und bitte vermeiden Sie [gelöst] in Ihrem Titel. – gunr2171

Antwort

1

Wenn comboBox2.Text eine Zahl (integer) hat man dann soll zuerst diesen Wert zu int konvertiert und dann zu GSMModemTypeConstants werfen, zum Beispiel:

int modemType = int.Parse(comboBox2.Text)); 
GSMModemTypeConstants s_type = (GSMModemTypeConstants)modemType; 

Oder konvertieren Sie comboBox2.SelectedItem in Ihre Enum.

+0

es ist eigentlich eine Zeichenfolge, die enum enthält eine Liste der Modemmodelle. Ich habe gerade eine Lösung für mein Problem gefunden, die von Enum.Parse gelöst wurde. Danke trotzdem für deine Antwort! – Karapapas