我希望在闭合表格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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top