如何防止控件中的事件在窗体关闭时触发

本文关键字:窗体 控件 何防止 事件 | 更新日期: 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"事件来实现这一点。

这将确保您的代码在表单关闭之前执行,并且应该准确地实现您所需要的。