-1

我所做的是,我创建了许多不同人的实例,然后将每个人添加到一个名为 listOfPeople 的列表中,并将每个人的名字放在一个列表框中。然后我创建了一个新表单来打印我从列表框中选择的人的详细信息,但是当我选择一个人时,他们的所有详细信息都会以多种形式打开。例如,如果我在 listOfPeople 中有 Bill & Jill,并且我想查看 Bill 的详细信息,则会打开 2 个表单,一个显示 Bill 的详细信息,另一个显示 Jill 的详细信息。

我该如何解决这个问题,以便只打开一个表单?

//This is where I create the instance to open the details form for a person
private void detailsButton_Click(object sender, EventArgs e)
{
       if (peopleListBox.SelectedItem == null)
        {
            MessageBox.Show("No person selected!");
        }
        else 
        {                
            foreach (Person person in listOfPeople)
            {
                PersonDetails personDetails = new PersonDetails(person);
                personDetails.Show();
            }
         }
 }


   public partial class PersonDetails : Form
  {
    //This is the constructor that takes in the as a parameter and prints their data
    public PersonDetails(Person person)
    {
        InitializeComponent();
        displayNameLabel.Text = person.PrintData().ToString();
    }
  }
4

1 回答 1

1

假设 ListBox 中的项目是Persons,你只需要使用SelectedItem来创建一个人。在上面的代码中,foreach 循环显式地为列表中的每个人创建并显示一个表单。我不太清楚你为什么对这种行为感到困惑。

private void detailsButton_Click(object sender, EventArgs e)
{
    if (peopleListBox.SelectedItem == null)
    {
        MessageBox.Show("No person selected!");
    }
    else
    {
        PersonDetails personDetails = 
                        new PersonDetails(peopleListBox.SelectedItem);
        personDetails.Show();
    }
}

如果SelectedItem不是一个人,那么您需要一种方法将 映射SelectedItem到 中的特定项目listOfPeople。例如,如果SelectedItem是一个名称的字符串表示,并且listOfPeople是一个Dictionary<string, Person>,那么你会做PersonDetails personDetails = listOfPeople[peopleListBox.SelectedItem];.

于 2013-04-05T01:54:22.817 回答