2016-01-24 56 views
-1

基本上,我想在列表框中選擇ABDUL SIDDIQ BIN MOHD YUSSAINI(M),然後學生的信息將顯示在右側。我的選擇列表框有問題

正確的輸出:

學生姓名:阿卜杜勒·西迪克BIN MOHD YUSSAINI

性別:(M)

但是,當我選擇阿卜杜勒它顯示此:

學生姓名:ABDUL SIDDIQ BIN MOHD YUSSAINI(M)

性別:阿卜杜勒·西迪克BIN MOHD YUSSAINI

這裏是我的編碼:

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(); 
    } 

回答

0

您可以從列表中鑄造抓住所選擇的項目砍掉了大量的代碼它回到它的對象類型。例如在列表框中單擊事件,讓所選擇的對象,並立即將其轉換爲相應的類型:

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); 
} 
0

的問題是在你最後兩行代碼:

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

它們都將相同的文本分配給學生姓名和性別框。