C# c语言中的表单刷新问题#

C# c语言中的表单刷新问题#,c#,winforms,C#,Winforms,我有两张表格A和表格B。当用户单击表单A上的按钮时,表单B将出现,但表单A已打开。用户可以在表单B中设置数据。当用户单击表单B中的添加按钮时,数据将传递到表单A,表单A中的文本框将显示 使用pass数据设置数据。我收到了传递的数据,但表单A的文本框中没有填充数据。我该怎么做 在表格B中添加按钮剪辑 private void btnAdd_Click(object sender, EventArgs e) { EmployeeAddressEntity e

我有两张表格A和表格B。当用户单击表单A上的按钮时,表单B将出现,但表单A已打开。用户可以在表单B中设置数据。当用户单击表单B中的添加按钮时,数据将传递到表单A,表单A中的文本框将显示 使用pass数据设置数据。我收到了传递的数据,但表单A的文本框中没有填充数据。我该怎么做

在表格B中添加按钮剪辑

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

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

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

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

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

    FormB formB = new FormB();
    formB.Owner = this;
    fromB.show();
这将使您能够在以后调用:

((NewEmployee)Owner).FillAddressGrid(empAdd);

当您调用
NewEmployee emp=newnewemployee()时,从表B.

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

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

    FormB formB = new FormB();
    formB.Owner = this;
    fromB.show();
这将使您能够在以后调用:

((NewEmployee)Owner).FillAddressGrid(empAdd);

在FormB中的Form B.

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

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

private FormA m_FormA;
using (FormB form = new FormB(this)) {
    form.Show();
}
当您从FormA中显示FormB时,请传递引用

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

private FormA m_FormA;
using (FormB form = new FormB(this)) {
    form.Show();
}
当您准备好更新FormA时,请调用您的成员函数

this.m_FormA.FillEmployeeGrid(empAdd);

一旦所有这些都正常工作,您就不需要调用Refresh()来更新UI,除非有什么东西将阻塞UI线程(您可能希望在其中执行一些异步操作)。

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

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

private FormA m_FormA;
using (FormB form = new FormB(this)) {
    form.Show();
}
当您从FormA中显示FormB时,请传递引用

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

private FormA m_FormA;
using (FormB form = new FormB(this)) {
    form.Show();
}
当您准备好更新FormA时,请调用您的成员函数

this.m_FormA.FillEmployeeGrid(empAdd);

一旦所有这些都正常工作,您就不需要调用Refresh()来更新UI,除非有什么东西将阻塞UI线程(您可能希望在其中执行一些异步操作)。

请提供一些示例代码。两个表单是否在同一个消息循环下运行?您是如何传递数据的?为什么不在这里粘贴代码?请提供一些示例代码。两个表单是否在同一个消息循环下运行?如何传递数据?为什么不将代码粘贴到此处?ArgumentException未处理。无法将顶级控件添加到控件。它应该是formB.Owner=this,因为父级意味着formB是FormA的子控件,而不是。ArgumentException未处理。无法将顶级控件添加到控件中。它应该是formB.Owner=this,因为父控件意味着formB是FormA的子控件,而不是。我使用refresh()方法进行刷新,但不使用refresh。refresh()是一个调用,它会导致窗体的客户端区域无效并重新绘制,它与更新控件的值无关。您没有看到值更新的原因是,您没有更新表单的实例。您正在创建表单的一个新实例,但不使用它。如果您实现了我提供的方法(我可能会适当地添加),则不需要调用Refresh(这对您尝试执行的操作没有任何影响),您应该会得到工作结果。我使用Refresh()方法进行Refresh,但表单没有Refresh。Refresh()是一个调用,它会导致表单的客户端区域无效并重新绘制,它与更新控件的值无关。您没有看到值更新的原因是,您没有更新表单的实例。您正在创建表单的一个新实例,但不使用它。如果您实现了我提供的方法(我可能会适当地添加),那么您不需要调用Refresh(这对您尝试执行的操作没有任何影响),并且您应该会得到工作结果。