首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让父窗体知道该子窗体已关闭

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

Stack Overflow用户
提问于 2018-07-29 23:05:48
回答 3查看 378关注 0票数 -3

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

我有一个解决办法-隐藏按钮,当子进程引发closing事件时,我调用PerformeClick方法。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-29 23:28:57

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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);
    }

为自定义委派和事件编辑

Form2代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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
EN

Stack Overflow用户

发布于 2018-07-29 23:52:26

实现这一点的一种方法是:

Form2FormClosing事件处理程序返回DialogResult

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    this.DialogResult = DialogResult.OK;
}

Form1的新线程上运行模式ShowDialog(),并等待DialogResult

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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");
        }
    });
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-30 01:28:12

你要做的就是:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void ChildFromClosed()
    {
        //Inform here
        MessageBox.Show("Child form is closed!");
    }

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void frmChild_FormClosed(object sender, FormClosedEventArgs e)
    {
        //calling the static method in Parents form
        frmParent.ChildFromClosed();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51585260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文