2016-01-23 101 views
0

我想要一個列表框來顯示所有來自班級M5等的學生,但它只顯示一個學生。列表框顯示所有學生

另一個問題是,當我從列表框中隨機選擇一個名稱時,學生的信息將顯示在右側,但是當我單擊學生時,出現錯誤nullreferenceexception未處理。

這裏是我的代碼:

private void loadToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     openFileDialog1.ShowDialog(); 
     fileToolStripMenuItem.Text = openFileDialog1.FileName; 


     StreamReader sr = new StreamReader(openFileDialog1.FileName); 

     string line = ""; 


      while ((line = sr.ReadLine()) != null) 
      { 

       string name = ""; 
       string gender = ""; 

       char[] selected = line.ToCharArray(); 

       for (int i = 0; i < selected.Length; i++) 
       { 
        if (selected[i] != '(') 
        { 
         name += selected[i]; 

        } 

        else if (selected[i] == '(') 
        { 
         gender += selected[i + 1]; 
         break; 
        } 

       } 

       Student student = new Student(); 

       student.setName(name); 
       student.setGender(gender); 

       studentListBox.Items.Clear(); 
       birthdatePicker.Value = DateTime.Now; 
       studentlist.addStudent(student); 
       studentListBox.Items.Add(student); 

     } 

     sr.Close(); 

    private void studentListBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string name = studentListBox.SelectedItem.ToString(); 

     Student s = studentlist.findStudent(name); 

     s.setName(studentNameTB.Text); <---Error (nullreferenceexception was unhandled) 
     s.setGender(genderTB.Text); 
     s.setBirthDate(birthdatePicker.Value); 
    } 
+0

對於問題的第二部分。顯示findStudent的代碼並顯示學生類如何覆蓋ToString()方法以在列表框中顯示學生名稱 – Steve

回答

3

對於「只有一個學生」的問題,從您的while循環刪除此行,並在它所說的那樣:

studentListBox.Items.Clear(); 

的問題是,你在添加新的學生之前,每次都要刪除所有學生。

0

是否有可能studentlist.findStudent(name);返回null? 如果這是問題,那麼你應該看到你的方法studentlist.findStudent(name)