我选择的列表框有问题

本文关键字:有问题 列表 选择 | 更新日期: 2023-09-27 18:31:33

基本上,我想在列表框中选择ABDUL SIDDIQ BIN MOHD YUSSAINI (M),然后学生的信息将显示在右侧。

正确输出:

学生姓名:阿卜杜勒·西迪克·本·穆罕默德·尤赛尼

性别: (M)

但是当我选择阿卜杜勒时,它会显示以下内容:

学生姓名:阿卜杜勒·西迪克·本·穆罕默德·尤赛尼(男)

性别:阿卜杜勒·西迪克·本·穆罕默德·尤赛尼

这是我的编码:

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);
   birthdatePicker.Value = DateTime.Now;
   studentlist.addStudent(student);
   studentListBox.Items.Add(student);

  }
  private void studentListBox_SelectedIndexChanged(object sender, EventArgs e) {
   string name = studentListBox.SelectedItem.ToString();
   Student s = studentlist.findStudent(name);
   if (s != null) {
    s.setName(studentNameTB.Text);
    s.setGender(genderTB.Text);
    s.setBirthDate(birthdatePicker.Value);
   }
   studentNameTB.Text = studentListBox.SelectedItem.ToString();
   genderTB.Text = studentListBox.SelectedItem.ToString();
  }

我选择的列表框有问题

您可以通过从列表中抓取所选项并将其强制转换为其对象类型来减少大量代码。例如,在列表框的单击事件中,获取所选对象并立即将其强制转换为适当的类型:

Student selectedStudent = (Student)listBox.SelectedItem;

下面是一个更完整的示例:

private void FrmMain_Load(object sender, EventArgs e)
{
    //you would fill from your file... this is just an example
    List<Student> students = new List<Student>();
    students.Add(new Student() { FirstName = "Joe", Gender = "Male" });
    students.Add(new Student() { FirstName = "Karen", Gender = "Female" });
    listBox.DataSource = students;
    listBox.DisplayMember = "FirstName";
}
public class Student
{
    public string FirstName { get; set; }
    public string Gender { get; set; }
    public string DisplayString { get { return string.Format("Name of student: {0}'r'nGender: ({1})", FirstName, Gender); } }
}
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
    Student selectedStudent = (Student)listBox.SelectedItem;
    MessageBox.Show(selectedStudent.DisplayString);
}

问题出在最后两行代码中:

studentNameTB.Text = studentListBox.SelectedItem.ToString();
genderTB.Text = studentListBox.SelectedItem.ToString();

它们都为学生姓名和性别框分配相同的文本。