Formを閉じる時だけValidatingイベント内での検証をやめる方法

フォームに貼り付けたコントロールのValidatingイベントハンドラ内で

if(!this.CauseValidation && this.ActiveControl == 元のコントロール)
{
return;
}
if (!this.ActiveControl.CausesValidation)
{
return;
}

とする。

×ボタンで閉じる時は、元のコントロールがアクティブなままなので、ActiveControlが元のコントロールだったら抜ける。

本来、ActiveControlのCauseValidationがfalseの時は、Validatingイベントが発生しないはずなので、Validatingイベント内で、ActiveControlのCauseValidationがfalseである事を確認したらreturnで抜ける。

カスタムコントロールの実装時には、OnValidatingをオーバライドして、base.OnVvalidating()を呼ぶまえに

System.Windows.Forms.Control 親コントロール = this.Parent;
while (親コントロール != null)
{
if (親コントロール is System.Windows.Forms.Form)
{
if (親コントロール.CausesValidation)
{
break;
}
if ((親コントロール as System.Windows.Forms.Form).ActiveControl == this)
{
return;
}
if (!(親コントロール as System.Windows.Forms.Form).ActiveControl.CausesValidation)
{
return;
}
}
親コントロール= 親コントロール.Parent;
}

とする。

基本的には、フォームに貼り付けた場合と同じで、追加された実装はFormコントロールを見つけるまで親を遡る事。

Share