如何从另一个表单刷新表单?

我有两个form- form1和form2。 我使用下面的代码片段从form1调用form2:

Application.run(new Form2()); Form2 f2=new Form2(); f2.show(); 

这段代码工作得非常好,我可以从form1看到form2加载。

现在我需要重复5次。 当我第一次运行它时,必须创建New istance(即上面的代码必须执行),但是当我运行第二次/第三次或第四次时,我需要刷新form2而不是创建一个新的form2。 当我运行上述代码5次时,会创建5个新的form2实例。 相反,form2必须只显示一次,但是当我调用除第一个表单之外的任何其他时间时,它必须刷新。 你能否对此有所了解?

。 当我运行上述代码5次时,会创建5个新的form2实例。 相反,form2必须只显示一次,但是当我调用除第一个表单之外的任何其他时间时,它必须刷新。

这是因为你创建了5次:

  Form2 f2=new Form2(); 

这将创建一个新表单。 如果你调用它5次,它将创建5个表单实例。

如果要刷新数据,则需要创建一个公共方法“Refresh()”并调用它。 例如:

 f2.Refresh(); 

这样,您将能够重做绑定或再次设置要为持久性刷新的数据。

你可以尝试这样….

请注意,这只是Mediator模式的基本实现。 我强烈建议你阅读一下这种模式,并一般地设计模式,以便更好地了解正在发生的事情。

同样,这是一个示例,但它确实有一些基本的错误检查,应该让你去。

您的表单声明将如下所示:

 public partial class MainForm : Form { private FormMediator _formMediator; public MainForm() { InitializeComponent(); } public void SomeMethodThatOpensTheSubForm() { SubForm subForm = new SubForm(); _formMediator = new FormMediator(this, subForm); subForm.Show(this); } } 

并且Mediator的修改实现如下所示:

 public class FormMediator { private Form _subForm; private Form _mainForm; public FormMediator(Form mainForm, Form subForm) { if (mainForm == null) throw new ArgumentNullException("mainForm"); if (subForm == null) throw new ArgumentNullException("subForm"); _mainForm = mainForm; _subForm = subForm; _subForm.FormClosed += MainForm_FormClosed; } void MainForm_FormClosed(object sender, FormClosedEventArgs e) { try { _mainForm.Refresh(); } catch(NullReferenceException ex) { throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex); } } } 

我希望它可以帮助你….