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コントロールを見つけるまで親を遡る事。