2012-04-05 11 views
1

Ich erstelle eine Windows-Formularanwendung mit VS2010. Ich möchte den Wert lesen, den der Benutzer aus dem Dropdown-Feld ComboBox ausgewählt hat, und basierend darauf patientNo generieren. Aber wenn ich die Anwendung starte, bekomme ich eine NullReferenceException.Wert von Combobox in Winform-Anwendung lesen

Hier ist mein Code:

private void button1_Click(object sender, EventArgs e) 
{ 
    string patientNumber; 

    string gender = comboBox2.SelectedValue.ToString(); 
    if (gender != null) 
    { 
     if (gender == "Female") 
     { 
      var generator = new PatientNumberGenerator(); 
      patientNumber = generator.GeneratePatientNumber(Gender.Female); 
      const string message = "patientNumber"; 

      const string caption = "Testing PatientNumber class"; 
      var result = MessageBox.Show(message, caption, 
             MessageBoxButtons.YesNo, 
             MessageBoxIcon.Question); 

     } 
     else if (gender == "Male") 
     { 
      var generator = new PatientNumberGenerator(); 
      patientNumber = generator.GeneratePatientNumber(Gender.Male); 
      const string message = "patientNumber"; 

      const string caption = "Testing PatientNumber class"; 
      var result = MessageBox.Show(message, caption, 
             MessageBoxButtons.YesNo, 
             MessageBoxIcon.Question); 
     } 
    } 

}

+3

Ich bezweifle, dass alle 8 Fragen, die Sie gestellt haben, keine richtige Antwort haben. Sie müssen einige von ihnen akzeptieren. –

+3

Ich habe einige Ideen, wo der Fehler sein könnte, aber es würde helfen, wenn Sie uns sagen, in welcher Zeile Sie die Ausnahme erhalten, auch werde ich keine Antwort geben, wenn Sie es später nicht wie bei den anderen Fragen akzeptieren werden Du hast keine Antwort für angenommen. – aKzenT

+0

Wie initialisierst du die Combobox? 'comboBox2.SelectedValue' könnte null sein –

Antwort

4

Sie haben nicht gesagt, auf welcher Linie die Ausnahme auftritt, also ist es ein bisschen im Dunkeln. Allerdings:

string gender = comboBox2.SelectedValue.ToString(); 

comboBox2.SelectedValue könnte null sein, wobei in diesem Fall versuchen, ToString() auf es nennen würde eine Nullreferenceexception verursachen. Versuchen:

if (comboBox2.SelectedValue == null) 
{ 
    return; 
} 
string gender = comboBox2.SelectedValue.ToString(); 
//[etc…] 

Wenn das nicht Ihr Problem ist die Ausnahme sein kann innerhalb anderer Anrufe in diesem Verfahren, wie GeneratePatientNumber.

+1

In Ihrem Beispiel, wenn es überhaupt auf die ToString Linie bekommt, wird die SelectedValue immer null –

+0

sein Du hast Recht, dumme Fehler meinerseits. Geändert. :) – raveturned

+0

Die Ausnahme Punkt in Zeile No 3 – kombo

0

Der einzige Ort, den ich sehen, können Sie eine Nullreferenceexception andere als in GeneratePatientNumber ist

comboBox2.SelectedValue.ToString(); 

Wenn nichts .SelectedValue ausgewählt bekommen würde wird null sein, daher kann ToString() nicht aufgerufen werden.

+0

Hier ist die funktionierende Lösung: comboBox2.Text.ToString(); – kombo

+0

@ecomma, '.Text' gibt trotzdem eine Zeichenkette zurück, so dass die' .ToString() 'nicht benötigt wird. –

2

Wenn Sie irgendwo in Ihrem Code die Eigenschaft comboBox2.DataSource für eine Datenquelle festlegen, wird .SelectedValue einen Wert abrufen. Wenn Sie nicht die Eigenschaft .DataSource festlegen, wird SelectedValue Null zurückgeben.

Ich gehe davon aus, dass Sie keine Datenquelle festlegen, sondern stattdessen Ihre Elemente im VS Designer festlegen, da Sie NULL-Werte erhalten. Wenn dies der Fall ist, sollten Sie stattdessen

comboBox2.SelectedItem.ToString() 

verwenden, um das SelectedItem in Ihrer Liste abzurufen.

+0

müssen Sie keine Datenquelle verwenden, um SelectedItem zu verwenden. –

+0

@AshBurlaczenko, aber wenn Sie eine Datenquelle verwenden _don't_ (wie ich vermute, ist, wie die OP es tut), dann _do_ Sie SelectedItem verwenden. –

+0

Danke BradRem Du hast wirklich die Ursache meines Problems erklärt. – kombo

0

Ich weiß, das ist über ein Jahr alt, aber ich arbeitete an einem ähnlichen Projekt mit genau dem gleichen Fehler. Was es für mich gerichtet war

comboBox2.SelectedText.ToString(); 

oder

comboBox2.SelectedItem.ToString(); 
0

mit Do combobox1.SelectedValue nicht in case Gebrauch verwenden:

string selected = combobox1.SelectedItem.ToString(); 

Es ist für mich gearbeitet.

Verwandte Themen