【问题标题】:How to properly listen form events with another form如何用另一个表单正确监听表单事件
【发布时间】:2013-04-13 23:58:17
【问题描述】:
卡在另一个表单的监听事件中。
当我尝试关闭 Form2 时,Form1 上没有任何反应。当 Form2 关闭时,我想在 Form1 中做一些事情。
这是我的 Form1 代码
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
Form2 frm2= new Form2();
frm2.FormClosing += new FormClosingEventHandler(frm2_FormClosing);
}
void frm2_FormClosing(object sender, FormClosingEventArgs e)
{
throw new NotImplementedException();
}
【问题讨论】:
标签:
c#
winforms
forms
events
【解决方案1】:
您需要显示您正在实现它的对象是FormClosing 事件。由于您正在创建的新对象在您的构造函数中,我假设 frm2 不是您正在显示的表单,这意味着您没有处理该事件。
public Form1()
{
InitializeComponent();
Form2 frm2 = new Form2();
frm2.FormClosing += frm2_FormClosing;
frm2.Show();
}
void frm2_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("Form2 is closing");
}
【解决方案2】:
您创建了一个新的 form2 实例,并听取了它的关闭事件 - 但从您发布的代码中您从未显示它?不知道我错过了什么,但你认为应该工作的工作确实有效 - 即:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.FormClosing += frm2_FormClosing;
frm2.Show();
}
void frm2_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("form 2 closed");
}
}