题
我希望在闭合表格2时刷新Form1。我知道使用Form2的结束活动,但这就是我迷路的地方。
谢谢
解决方案
实现这一目标的一个好方法是使用调解人模式。这样,您的表格不必一定要彼此了解。允许调解员管理表格之间的相互作用,以便每种形式可以集中于自己的职责。
一个非常粗糙的调解人可以像这样实现您想要的东西:
public class FormMediator
{
public Form MainForm { private get; set; }
public Form SubForm { private get; set; }
public void InitializeMediator()
{
MainForm.FormClosed += MainForm_FormClosed;
}
void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
SubForm.Refresh();
}
}
现在,每当关闭主表单时,您的子表单都会更新,并且都不一定彼此了解。
编辑:
好的,所以我要把这个解决方案提出来,这将使您入门,但是请注意,这只是调解器模式的基本实现。我强烈鼓励您阅读有关这种模式的信息,并总体上设计模式,以便更好地了解正在发生的事情。
同样,这是一个示例,但是确实有一些基本的错误检查,应该让您继续前进。
您的表格声明将看起来像这样:
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);
}
}
调解员的修改实现看起来像这样:
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);
}
}
}
其他提示
一种解决方案是将form1的引用传递给构造函数中的form2,然后在form2结束事件中调用f1。
不隶属于 StackOverflow