检测表单何时关闭c#
我有一个我创建的WinForm,它显示一个带按钮的提示。 这是一个自定义的WinForm视图,因为消息框对话框还不够。
我有一个后台工作人员开始运行。 如果单击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 }
你可能会过度杀戮。 要显示类似对话框窗口的表单并在将控制权返回给调用表单之前等待它退出,只需使用:
mySubForm.ShowDialog();
这将“阻止”主要forms直到孩子关闭。
处理表单关闭时要通知的表单的FormClosing事件,以便您可以执行任何清理。
您应该能够挂钩到FormClosing和FormClosed事件。
https://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx https://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(); }
注意这个this.Hide();
与this.Close();
在实际的对话框中覆盖已关闭的事件
上述就是C#学习教程:检测表单何时关闭c#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961854.html