【问题标题】:WinForms; detecting form closed from another form赢表格;检测从另一个表单关闭的表单
【发布时间】:2017-10-27 11:43:03
【问题描述】:

是否可以检测到从另一个表单关闭的表单。 例如。 如果我有一个打开 subForm 的 mainForm,我可以在 mainForm 中检测到 subForm 已关闭并执行代码吗?

我知道我可以在 subForm 中创建一个事件处理程序,但这并不是我真正想要的,因为在 subForm 关闭后我要做的是在 mainForm 中(更改为 mainForm)。

【问题讨论】:

    标签: c# forms winforms


    【解决方案1】:

    FormClosed 事件是公开的,因此您可以从主窗体创建处理程序。

    //Inside main Form.  Click button to open new form
    private void button1_Click(object sender, EventArgs e)
    {
          Form2 f2 = new Form2();
          f2.FormClosed += F2_FormClosed;
          f2.Show();
    }
    
    private void F2_FormClosed(object sender, FormClosedEventArgs e)
    {
        MessageBox.Show("Form was closed");
    }
    

    【讨论】:

    • 我现在觉得很傻,不知道它是公开的,所以我猜应该是在做一个事件。
    • 我可能在这里做错了什么,但我似乎无法让它工作。错误:无法将 void 转换为 FormClosedEventHandler。
    • 听起来您的代码中某处有错字。我在上面写的更简洁了,这可能会有所帮助。
    • 哦,我忘记了重载参数的参数...谢谢你工作正常。
    【解决方案2】:

    看看public FormClosedEvent。由于修饰符是公开的,因此您可以执行以下示例:

    SubForm subForm = new SubForm();
    subForm.FormClosed += delegate
    {
        MessageBox.Show("subForm has closed");
    };
    subForm.ShowDialog();
    

    上面的例子创建了一个新的表单(SubForm 类型),添加了一个新的事件处理程序来显示一个消息框,告诉用户表单已经关闭,最后使用ShowDialog() 方法来阻止用户访问主窗体,直到子窗体被关闭。

    【讨论】:

      【解决方案3】:

      通常的情况是“模态对话框”(如消息框及其系列)。 通过使用 ShowDialog() 而不是 Show(),每个表单都可以作为模态对话框打开。

      否则事件方式是唯一的方式。

      【讨论】:

      • 这与对话无关,因为他没有指定是否是。子表单打开时可能需要与主表单交互。
      • 由于他没有具体说明这是/不是关于对话,也可能是他不知道编写自己的对话很简单。实际上只有两种方法。我都提到了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2019-10-30
      • 1970-01-01
      相关资源
      最近更新 更多