2016-01-23 104 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)