如何防止控件中的事件在窗体关闭时触发
本文关键字:窗体 控件 何防止 事件 | 更新日期: 2023-09-27 18:20:32
我的问题是,我在Leave
事件中验证一个TextBox
,并检查这个TextBox
是否有内容。如果该TextBox
中的文本与零相同,则会出现MessageBox
,但如果表单正在关闭,并且焦点在该TextBox
中,则会显示MessageBox
,因为TextBox
没有任何内容。
表单关闭时,如何避免Leave
事件中的验证?
您需要覆盖表单上的OnFormClosing
方法,并设置一个标志,让您知道表单正在关闭。然后,在验证时,首先检查该标志。
请确保在调用base
之前设置标志。
protected override void OnFormClosing(FormClosingEventArgs e)
{
_isClosing = true;
base.OnFormClosing(e);
}
FormClosing
事件中将Enabled
属性设置为false。
private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
myTextBox.Enabled = false;
}
或者删除Leave
事件处理程序
private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
myTextBox.Leave -= myTextBox_Leave;
}
使用文本框的"validated"事件而不是"leave"事件来实现这一点。
这将确保您的代码在表单关闭之前执行,并且应该准确地实现您所需要的。