窗体关闭时检测c#
我有一个WinForm,我创建它显示一个按钮的提示。这是一个自定义的WinForm视图,因为消息框对话框不够。窗体关闭时检测c#
我有一个后台工作人员启动并运行。如果单击myForm上的按钮,我也想退出while(aBackgroundWorker.IsBusy
)循环。
//MyProgram.cs
using(CustomForm myForm = new CustomForm())
{
myForm.Show(theFormOwner);
myForm.Refresh();
while(aBackgroundWorker.IsBusy)
{
Thread.Sleep(1);
Application.DoEvents();
}
}
眼下,在CustomForm
的Button_clicked
事件,我有
//CustomForm.cs
private void theButton_Click(object sender, EventArgs e)
{
this.Close();
}
我需要更多的代码添加到CustomForm类,或者我宣布的位置和初始化为了形式能够检测到关闭?
检测何时形式实际上被关闭,你需要连接的FormClosed事件:
this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
// Do something
}
或者:
using(CustomForm myForm = new CustomForm())
{
myForm.FormClosed += new FormClosedEventHandler(MyForm_FormClosed);
...
}
void MyForm_FormClosed(object sender, FormClosedEventArgs e)
{
// Do something
}
救了我的一天..感谢您的美妙回答 – MBH 2015-12-25 12:45:13
其他参考,帮助我了解一点:http://www.dreamincode.net/forums/topic/185541-trigger-event-in-another-form/ 'private void button1_Click(object sender,EventArgs e) { Form2 form2 = new Form2(); form2.FormClosed + = new FormClosedEventHandler(form2_FormClosed); form2.Show(); } void form2_FormClosed(object sender,FormClosedEventArgs e) { MessageBox.Show(“Form 2 Closed!”); } ' – 2017-12-19 13:08:26
你应该能够钩入FormClosing和FormClosed事件。
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosed.aspx
闭它关闭之前。 关闭后关闭。
一对夫妇的事情...
首先,出现该循环,以防止在对话框打开时执行表单。如果是这种情况,请将.Show(parent)
更改为.ShowDialog(parent)
。这也将照顾你的问题的其余部分。
确保您的后台工作人员支持取消操作,并如其他人指出的那样使用表单关闭事件处理程序。此代码应指向正确的方向:
using(CustomForm myForm = new CustomForm())
{
myForm.FormClosed += new FormClosedEventHandler(ChildFormClosed);
myForm.Show(theFormOwner);
myForm.Refresh();
while(aBackgroundWorker.IsBusy)
{
Thread.Sleep(1);
Application.DoEvents();
}
}
void ChildFormClosed(object sender, FormClosedEventArgs e)
{
aBackgroundWorker.CancelAsync();
}
您可能会过度使用。要将对话框窗口显示并等待它退出,然后再将控制权返回给调用窗体,请使用:
mySubForm.ShowDialog();
这将“阻塞”主窗体直到孩子关闭。
这可以保持用户界面的轻松,并简化阅读和澄清意图。没有气味。 – 2017-05-03 15:24:37
注意this.Hide();
是不一样的this.Close();
在实际的对话框你重写关闭事件
你想要什么样的形式/班通知窗口关闭的? – Decker97 2012-01-05 22:16:59
编写这段代码没有任何意义。大概在这个while循环之后有些东西*。将该代码移动到该BGW的RunWorkerCompleted事件处理程序。 – 2012-01-05 22:18:30