据说列表框显示了学生姓名和性别的列表,而是显示了Assignment2.Student。请帮助解决我的问题:(
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);
s.setGender(genderTB.Text);
s.setBirthDate(birthdatePicker.Value);
}
答案 0 :(得分:2)
您必须覆盖Student类的ToString函数。然后,ListBox将使用此方法显示您想要的每个学生的信息:
public override String ToString()
{
return name + " " + gender;
}
如果你不覆盖它,ToString方法将只返回你的对象的类型,这里是Assignment2.Student。
答案 1 :(得分:0)
您可以优化代码,例如关注
string[] students = File.ReadAllLines(openFileDialog1.FileName);
foreach (string student in students)
{
string[] split = student.Split('(');
StudentList.Add(new Student() { Name = split[0], Gender = split[1][0].ToString() });
}
listBox1.Items.Clear();
listBox1.Items.AddRange(StudentList.ToArray());
对于显示问题,我建议覆盖ToString()
函数
public override string ToString()
{
return string.Format("{0} / {1} ", Name, Gender);
}