列表框显示错误:(

时间:2016-01-23 14:56:50

标签: c# listbox

据说列表框显示了学生姓名和性别的列表,而是显示了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);
    }

2 个答案:

答案 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);
}