我的問題是,我在Leave
事件中驗證了TextBox
,我檢查此TextBox
有什麼。如果此TextBox
中的文本與0相同,則出現MessageBox
,但如果表單正在關閉並且焦點位於此TextBox
中,則會出現MessageBox
,因爲TextBox
沒有任何內容。如何防止在窗體關閉時發生控件觸發事件
如何在表單關閉時避免Leave
事件中的驗證?
我的問題是,我在Leave
事件中驗證了TextBox
,我檢查此TextBox
有什麼。如果此TextBox
中的文本與0相同,則出現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;
}
使用文本框的「驗證」事件來實現的,而不是「離開」事件這一點。
這將確保您的代碼在表單關閉前執行,並且應該實現您需要的內容。
我想試試這個,但我如何分配這個事件,覆蓋,_isClosing是我需要驗證的單位? –
@JoséGordilloLópez,請參閱我的更新(我將'virtual'改爲'override')。此外,'_isClosing'是類變量'private bool _isClosing;',您將設置爲讓表單知道它正在關閉。然後在'Leave'事件中,你會這樣做,'if(_isClosing){return; }'取消驗證。 –
感謝,這項工作非常好,對於其他用戶,謝謝 –