2016-08-20 214 views
0

我在尝试关闭子窗口窗体后刷新父窗口时遇到问题。下面是我的代码:从子窗口刷新父窗口

private void btnSave_Click(object sender, EventArgs e) 
    { 
     BusinessClient bc = new BusinessClient(); 
     bc.CompanyName = txtCompanyName.Text; 
     bc.PointOfContact = txtPointOfContact.Text; 
     bc.Address1 = txtAddressOne.Text; 
     bc.Address2 = txtAddressTwo.Text; 
     bc.City = txtCity.Text; 
     bc.State = cbxState.Text; 
     bc.Zip = txtZip.Text; 
     bc.Phone = txtPhone.Text; 
     bc.Email = txtEmail.Text; 

     BusinessClientMgr bcMgr = new BusinessClientMgr(); 
     bcMgr.StoreNewBusinessClient(bc); 

     AfterTheSave(); 

     AssignmentForm assignForm = new AssignmentForm(); 
     assignForm.Refresh(); 

     this.Close(); 
    } 

我想在这里做的是保存数据并关闭子窗口的形式,并有父窗口的形式通过检索新的数据显示刷新。我在这里错过了什么吗?虽然我明白,子窗口窗体不应该控制父母。想想看,小孩正在要求家长更新信息。

+0

您是否尝试过搜索解决方案?这个问题已经答复了上千次。 –

+0

'assignForm.Refresh()'与表单数据无关,只是重绘表单图形。 –

+0

@BastianThiede我已经搜索了解决方案,但都没有被发现,因为它们都与ASP.NET相关,我没有找到。 – Marc

回答

0

通过回答Aniruddha Varma是正确的。

你有2种形式:父母和孩子。

到父,我们要展示这个在您需要的子窗体:

Form2 child = new Form2(); 
child.Show(this); //We pass through the Parent instance to Child 

而且,另外,我们要声明一个公共方法编辑无论是你的表单控件这样:

public void SetText(string text) 
{ 
    parentTextbox.Text = text; 
} 

之后,我们进入子窗体。在此,我们将宣布在表事件“的FormClosing”或进入一个按钮来关闭该窗体下面的代码:

Form1 parent = (Form1) Owner; 
parent.SetText(childTextbox.Text); 

有了这个,我们要夺回父实例到孩子,然后回调Method SetTex,我们通过参数我们的文本。回顾第一种形式,我们将通过Child's Form中的文本更新Parent的文本框。

+0

它的工作原理 - 感谢您澄清Aniruddha的帖子。 – Marc

0

父窗体代码:

var child = new ChildForm(); 
child.Show(this); 

子窗体代码:

var myParent = (MainForm)this.Owner; 
myParent.ParentMethod(); 

MainForm是你的父窗体,并ChildForm是要显示的新形式。

+0

试过 - 没有工作,没有用新的数据更新父窗体。 – Marc

+0

@Marc'ParentMethod'是父窗体上的一种方法。你可以从子窗体调用这个方法并传递一个参数(比如'int'),'ParentMethod'可以更新它的形式。 –

+0

@Marc它抛出了什么错误?正如Rakitić在评论中提到的那样,“刷新”方法与表单中的值无关。 –