c#中的表单刷新问题

时间:2011-07-09 08:47:32

标签: c# winforms

我有两个表格A和B。当用户单击表单A上的按钮时,表单B将显示,但表单A已经打开。用户可以在表单B中设置数据。当用户单击表单B中的添加按钮时,数据将传递到表单A,表单A中的文本框将 使用传递数据设置数据。我收到了传递的数据,但是表格A的文本框没有填写数据。我怎么能这样做?

在表格B中添加按钮clik

private void btnAdd_Click(object sender, EventArgs e)
        {

            EmployeeAddressEntity empAdd = new EmployeeAddressEntity();
            empAdd = AddEmployee();

            this.Close();
            NewEmployee emp = new NewEmployee();
            emp.FillAddressGrid(empAdd);    

        }

表格A

public void FillAddressGrid(EmployeeAddressEntity emp)
        {
            txtAddressName.Text = emp.name;

            dgvAddress.Rows.Add(emp.type,emp.name,emp.homephone,emp.fax,emp.email,emp.address,emp.country_id);
            //int a = dgvAddress.Rows.Count;
            dgvAddress.EndEdit();
            dgvAddress.Refresh();
            dgvAddress.Parent.Refresh();

            this.Refresh();
        }

3 个答案:

答案 0 :(得分:3)

在FormB中,定义一个私有字段,用于存储对FormA的引用,并创建一个自定义构造函数来传递引用。

public FormB(FormA form) {
    this.m_FormA = form;
} 

private FormA m_FormA;

当您从FormA显示FormB时,请传递参考。

using (FormB form = new FormB(this)) {
    form.Show();
}

当您准备好更新FormA时,请致电您的会员功能。

this.m_FormA.FillEmployeeGrid(empAdd);

一旦你完成所有这些工作,你就不需要调用Refresh()来更新UI,除非有什么东西会阻塞UI线程(你可能想要做一些异步)。

答案 1 :(得分:2)

当您在表单b中调用NewEmployee emp = new NewEmployee();时,您正在创建对FORM A的新实例的引用(这是'NewEmployee',对吗?),但您实际上从未显示此实例。当您调用emp.FillAddressGrid(empAdd);时,您正在操作一个隐藏的实例而不是您可以看到的实例。

当您创建表单B的实例时,您需要传递对表单B的引用,如:

    FormB formB = new FormB();
    formB.Owner = this;
    fromB.show();

这将使您能够稍后调用:

((NewEmployee)Owner).FillAddressGrid(empAdd);
表格B

答案 2 :(得分:-1)

所以你从表格B到表格A获取数据, 将收到的数据存储在一个变量中,并将该变量分配给文本框。 喜欢, textbox1.text = v.tostring();