我有两个form- form1和form2。我使用下面的代码片段从form1调用form2:
Application.run(new Form2());
Form2 f2=new Form2();
f2.show();
此代码工作正常,我可以看到从form1加载form2。
现在我需要重复5次。当我第一次运行它时,必须创建新的比例(即上面的代码必须执行)但是当我运行第二次/第三次或第四次时,我需要刷新form2而不是创建一个新的form2。当我运行上面的代码5次时,会创建5个新的form2实例。相反,form2必须只显示一次,但是当我调用除第一个表单之外的任何其他时间时,它必须刷新。你能否对此有所了解?
答案 0 :(得分:4)
。当我运行上面的代码5次时,5个新的form2实例 创建。相反,form2必须只显示一次但必须显示 当我打电话给第一张表格以外的任何其他时间时刷新。
这是因为你创建了5次:
Form2 f2=new Form2();
这会创建一个新表单。如果你调用它5次,它将创建5个表单实例。
如果要刷新数据,则需要创建一个公共方法“Refresh()”并调用它。例如:
f2.Refresh();
这样,您将能够重做绑定或再次设置要为持久性刷新的数据。
答案 1 :(得分:4)
请注意,这只是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);
}
}
}
我希望它可以帮助你......