代码之家  ›  专栏  ›  技术社区  ›  0___________

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

  •  -1
  • 0___________  · 技术社区  · 6 年前

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

    我有一个解决方法——隐藏按钮,当孩子引发关闭事件时,我调用performclick方法。

    有没有更好(更正确)的方法?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Boxed    6 年前

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

        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!");
        }
    
        2
  •  1
  •   L_J    6 年前

    一种方法是:

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

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }
    

    运行模态 ShowDialog() 在新线程上 Form1 然后等待 对话结果

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        System.Threading.Tasks.Task.Run(() =>
        {
            if (f2.ShowDialog() == DialogResult.OK)
            {
                // do here whatever you want to do
                MessageBox.Show("Form2 closed");
            }
        });
    }
    
        3
  •  0
  •   CertainPerformance    6 年前

    你所要做的就是:

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

    public static void ChildFromClosed()
        {
            //Inform here
            MessageBox.Show("Child form is closed!");
        }
    

    2:在子窗体中添加从父窗体调用该方法的(FormClosed)事件:

    private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
        {
            //calling the static method in Parents form
            frmParent.ChildFromClosed();
        }