从列表框到使用两种表单的标签,C#

时间:2011-02-17 08:38:00

标签: c# winforms

4 个答案:

答案 0 :(得分:1)

我假设你在这里使用字符串来填充ListBox(你实际上并没有告诉我们你是如何传递数据的)。而不是将Form2中的字符串传递回Form1,而是传递数据对象:

class Person
{
    string Name { get; set; }
    string PhoneNumber { get; set; }  // perhaps not best as a string
    string City { get; set; }
}

现在公开Form2中的“Person”属性:

class Form2
{
    public Person Person
    {
        get { return new Person() { Name = txtName.Text, PhoneNumber = txtPhone.Text, City = txtCity.Text }; }
    }
}

因此,在Form1中,您可以像这样使用该属性:

using( Form2 frm = new Form2() )
{
    if( frm.ShowDialog() == DialogResult.OK )
    {
        Person p = frm.Person;
        list.Items.Add( p.Name );
        lblName.Text = p.Name;
        lblPhone.Text = p.PhoneNumber;
        lblName.City = p.City;
    }
}

答案 1 :(得分:0)

你必须编写代码来更新列表框的SelectedIndexChanged事件中的标签。可能是这样的事情:

  private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            form2.label1.text = getname(listBox1.SelectedItem.ToString());
            form2.label2.text = getPhone(listBox1.SelectedItem.ToString());
            form2.label3.text = getCity(listBox1.SelectedItem.ToString());
        }

答案 2 :(得分:0)

我不是100%肯定我理解你的form1上的布局,但听起来好像你想要一些数据绑定,这可能会让你的生活更轻松。

如果你有一个名为Person的班级,那里有姓名,电话,城市财产。然后,而不是使用列表框,在主窗体上使用数据网格(适当地设置样式),它可以绑定到List。

然后,当您可以使用标签将新Person添加到数据源时,您也可以在datagrid中选择一个人,并使您的标签与列绑定,例如

this.lblName.Text = form1.datagrid.SelectedRows[0].Cell["Name"];

不直接回答你的问题,但也许是一个更好的方法。

答案 3 :(得分:0)

当用户从Form2单击“确定”时,您必须检索他们刚刚输入的数据并将其存储在Form1中的某个位置。

我的建议是使用名为Person的结构类型或包含Name,Phone和City字段的结构类型。此外,重写ToString方法,然后只需返回Name字段。然后,您可以将Person对象添加到ListBox。只有名称将出现在ListBox中,ListBox的SelectedItem属性将返回一个Person结构,这将使您可以访问所选项目所需的所有信息。

现在剩下的就是处理SelectedIndexChanged事件,您可以从中使用SelectedItem属性中的数据填充标签。