C# 如何让父窗体知道子窗体已关闭

C# 如何让父窗体知道子窗体已关闭,c#,winforms,C#,Winforms,我的主窗体打开子窗体。当子窗体关闭时,父窗体需要执行一些任务。父窗体如何知道子窗体已关闭 我有一个解决方法-隐藏按钮,当子对象引发关闭事件时,我调用PerformClick方法 还有更好更正确的方法吗?在实例化子窗体时,为主/父窗体添加侦听器事件。示例如下: private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.CustomFormCl

我的主窗体打开子窗体。当子窗体关闭时,父窗体需要执行一些任务。父窗体如何知道子窗体已关闭

我有一个解决方法-隐藏按钮,当子对象引发关闭事件时,我调用PerformClick方法


还有更好更正确的方法吗?

在实例化子窗体时,为主/父窗体添加侦听器事件。示例如下:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.CustomFormClosed += CloseListener;
        f2.Show();
    }

    private void CloseListener(object sender, EventArgs e, string test)
    {
        Console.WriteLine(test);
    }
为自定义委托和事件编辑

表格2代码:

    public delegate void CustomFormClosedHandler(object semder, FormClosedEventArgs e, string text);
    public event CustomFormClosedHandler CustomFormClosed;

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        CustomFormClosed(sender, e, "Hello World!");
    }
一种方法是:

从Form2的FormClosing事件处理程序返回DialogResult

在Form1中的新线程上运行modal ShowDialog并等待对话框结果

你所要做的就是:

1:在父窗体中添加公共静态方法:

public static void ChildFromClosed()
    {
        //Inform here
        MessageBox.Show("Child form is closed!");
    }
private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
    {
        //calling the static method in Parents form
        frmParent.ChildFromClosed();
    }
2:在子窗体中添加FormClosed事件,该事件从父窗体调用该方法:

public static void ChildFromClosed()
    {
        //Inform here
        MessageBox.Show("Child form is closed!");
    }
private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
    {
        //calling the static method in Parents form
        frmParent.ChildFromClosed();
    }

您是否查看了表单关闭事件?请发布您当前的代码。您如何打开子窗体?这是模态对话吗?你想这样吗?谢谢。我可以传递任何参数吗?@P_uj_u_u它可以,但不能使用内置的FormClosed事件,因为它的委托有自己的特定参数。您必须注册一个新的委托和事件才能使用参数。@P_uj_u_u我假设该参数是来自子窗体的数据。对吗?@N_C夫人你能详细说明一下吗?我刚刚从IDE中复制并粘贴了该代码,因此该代码应该可以正常工作。@Mrs_N_C是的,因为我自己在Visual Studio中编写并尝试了该代码。我不认为需要在上述代码中使用Form2_FormClosing方法。@Camiloterevento您有什么建议?我应该在哪里设置对话框结果?