Control.CausesValidation のまとめっぽいもの

いつものごとく、本当にメモ程度の話。 C# .NET

わたしは勝手に Control.CausesValidation プロパティを、自コントロールの検証を行うか否かというものだと思っていた。これを false にすれば、そのコントロールの Validating と Validated イベントが発生しなくなるのかと。勘違いしていた。

実際はそのコントロールへ遷移した場合に、遷移元であるコントロールの Validating と Validated イベントを抑制する、というもの。 TextBoxA にフォーカスがある状態で CausesValidation=false である ButtonB をクリックするときに意味がある。この際 TextBoxA.CausesValidation は関係ない。

ただし ButtonB クリック時、 Enter キー押下時には TextBoxA の検証イベントが発生しないけれども、×ボタン押下時や ButtonB.PerformClick メソッド実行時、それ以外にも Visual Basic の話ながらこちらのページによると Form.Close 実行、 ButtonB に対する Space キー押下時には検証されてしまうらしい。

検証時に ActiveControl が ButtonB かどうか確認するという手段もあるもよう。しかし Form.KeyPreview を true にしてファンクションキーの押下をトラップし PerformClick を呼び出す、なんてときにはその手段を使えないっぽい。

参考資料は以下の通り。

うん。書いてみたが分かっていない。