5

我的问题是我TextBoxLeave事件中验证 a 并检查它TextBox是否有一些东西。如果 this 中的文本TextBox与零相同,MessageBox则出现 a,但如果表单正在关闭且焦点在 thisTextBox中,则MessageBox出现,因为TextBox没有任何内容。

如何避免Leave表单关闭时的验证?

4

3 回答 3

6

您将需要覆盖OnFormClosing表单上的方法并设置一个标志,让您知道表单正在关闭。然后,在验证时,首先检查该标志。

请务必在调用之前base设置标志。

protected override void OnFormClosing(FormClosingEventArgs e)
{
    _isClosing = true;

    base.OnFormClosing(e);
}
于 2013-07-01T19:04:15.557 回答
4

一种方法是删除文本框引发的事件。我不确定您是如何验证的,但您可以尝试在事件中将该Enabled属性设置为 false 。FormClosing

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{        
    myTextBox.Enabled = false; 
}

或者删除Leave事件处理程序

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{       
    myTextBox.Leave -= myTextBox_Leave;
}
于 2013-07-01T19:05:00.073 回答
1

使用文本框的“已验证”事件而不是“离开”事件来实现此目的。

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

于 2013-07-02T00:44:31.107 回答