【问题标题】:Know When Child Form Closed知道子表单何时关闭
【发布时间】:2015-05-29 18:39:40
【问题描述】:

我有一个带按钮的 Form1。当您单击按钮时,此代码块会执行:

Form2 frm = new Form2();
frm.Name = "Form" + musteriNumarasi.ToString();
frm.Text = "Kullanıcı - " + musteriNumarasi.ToString();

假设我点击了 3 次。现在有四种形式:Main、Child1、Child2、Child3。当用户关闭其中一个子窗体时,主窗体需要知道关闭了哪一个。我该怎么做?

【问题讨论】:

  • 一种方法是让父母监听他们孩子的表单关闭事件。
  • 要么在父窗体上为子窗体的关闭事件建立一个侦听器,或者在语义上较少的情况下,在子窗体的关闭事件中,您可以在主窗体上执行代码。
  • 订阅 FormClosed 事件。要么为每个特定的孩子使用一个专用的事件处理程序,要么使用一个公共的,sender 参数告诉你哪个被关闭了。

标签: c# winforms


【解决方案1】:

订阅Closed Event

Form2 frm = new Form2();    
frm.FormClosed += new FormClosedEventHandler(Form_Closed);

void Form_Closed(object sender, FormClosedEventArgs e)
{
    Form2 frm = (Form2)sender;
    MessageBox.Show(frm.Name);
}

【讨论】:

  • 这会产生编译错误。错误 CS0029 无法将类型“System.EventHandler”隐式转换为“System.Windows.Forms.FormClosedEventHandler”
  • 然后将 FormClosedEventArgs 改为 EventArgs
【解决方案2】:
Form2 frm = new Form2();   

frm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frm_FormClosed);

。 . .

private void frm_FormClosed(object sender, EventArgs e)
{
    //Runs after closing child :)
}

【讨论】:

    【解决方案3】:

    将这些行添加到您的代码中以处理关闭或关闭表单的事件

    frm.Closing += Form_Closing;
    frm.Closed += Form_Closed;
    

    将以下方法添加到当前类

    void Form_Closing (object sender,EventArgs e){
    //Handler form Closing Event
    }
    void Form_Closed (object sender,EventArgs e){
    //Handler form Closed Event
    }
    

    【讨论】:

    • sender 将是触发事件的 Form 对象的引用
    • 你应该真正编辑你的答案,而不是使用 cmets。
    • 这条评论只是一个提示,可以帮助你回答我的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多