在第二次上进行编辑后刷新表单

嘿大家我正在尝试刷新表单一旦更改完成一秒钟。 在我的第一个表单上,我按下“创建”按钮,将打开另一个表单,form2。 第二种forms将具有输入字段,并允许您输入在第一个表单上填充combobox的值。 在第二个表单上有一个按钮“更新”我想在第一个按下更新后刷新第一个表单。

我知道有这个this.refresh(); ,但我不确定这对我有用。 我正在尝试以下方面:

在表格2 –

 Private void Form2UpdateButton_Click { //do update stuff Form1_load.Refresh(); } 

或者可能

 private void Form2UpdateButton_Click { //do update stuff Form1.close(); Form1.Open(); } 

我仍然是C#的新手,并且将两个表格相互作用对我来说是一个相当复杂的概念所以请让我知道我是否以错误的方式解决这个问题。 我的刷新可能在错误的位置,但我认为这是我想要的。

在form2上创建一个自己的事件,当单击该按钮时触发该事件。 这样你就可以形成form2.OnUpdateClicked += yourMethod 。 像这样:

 public partial class Form1 : Form { private void CreateForm2() { Form2 frm2 = new Form2(); // Hook the event of form2 to a method frm2.PropertyUpdated += Form2Updated; } private void Form2Updated(object sender, EventArgs e) { // this will be fired } } public partial class Form2 : Form { // On form2 create an event public event EventHandler PropertyUpdated; private void Form2UpdateButton_Click() { // If not null (eg it is hooked somewhere -> raise the event if(PropertyUpdated != null) PropertyUpdated(this, null); } } 

建议:

您的第二个表单应该创建第一个表单,即

Form1中:

 public void RefreshParameters() { // ... do your update magic here } private void openForm2(..) { // Pass your current form instance (this) to new form2 var aForm = new Form2(this); aForm.Show(); // show, run, I don't remember... you have it } 

窗体2:

 // Here you will store a reference to your form1 form1 daddy = null; // A new constructor overloading default one to pass form1 public Fomr2(Form1 frm):base() { daddy = frm; // Here you store a reference to form1! } public void UpdateDaddy() { // And here you can call any public function on form1! frm.RefreshParameters(); } 

一种方法是将Form1的引用传递给Form2,如下所示:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonLaunchForm_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.LauncherForm = this; form2.Show(); } public void RefreshFormData() { // Refresh } } public partial class Form2 : Form { public Form2() { InitializeComponent(); } public Form1 LauncherForm { set; get; } private void buttonUpdate_Click(object sender, EventArgs e) { // do your normal work then: LauncherForm.RefreshFormData(); } } 

上述技术称为“物业注入” ;