2013-07-01 24 views
5

私の問題は、LeaveイベントのTextBoxを検証して、このTextBoxに何かがあるかどうかを確認することです。このTextBoxのテキストが0と同じ場合はMessageBoxが表示されますが、フォームが閉じてフォーカスがこのTextBoxの場合には何もないため、MessageBoxが表示されます。フォームが閉じるときにコントロールトリガーのイベントが発生しないようにする方法

フォームが閉じているときにLeaveイベントの検証を回避するにはどうすればよいですか?

答えて

6

フォームのOnFormClosingメソッドをオーバーライドして、フォームが終了していることを知らせるフラグを設定する必要があります。次に、検証するときは、最初にそのフラグを確認します。

baseを呼び出す前にフラグを設定してください。

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

    base.OnFormClosing(e); 
} 
+0

私はこれを試したいと思いますが、オーバーライドするこのイベントをどのように割り当てますか?_isClosingは、検証が必要なフラットですか? –

+0

@JoséGordilloLópez、私の更新を見てください(私は 'virtual'を' override'に変更しました)。さらに、 '_isClosing'は、フォームが閉じていることを知らせるために設定するクラス変数' private bool _isClosing; 'です。 'Leave'イベントで、これを行います。' if(_isClosing){return; } 'を呼び出して検証をキャンセルします。 –

+0

ありがとう、この作業は非常にうまくいって、残りのユーザーにとっては、ありがとう –

4

1つの方法は、テキストボックスが発生させるイベントを削除することです。どのように検証しているか分かりませんが、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; 
} 
1

代わりに「残す」イベントでこれを達成するために、テキストボックスの「検証」イベントを使用してください。

これにより、フォームが閉じる前にコードが実行され、必要なものが正確に得られるはずです。

関連する問題