Control.CausesValidation のまとめっぽいもの
わたしは勝手に 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 を呼び出す、なんてときにはその手段を使えないっぽい。
参考資料は以下の通り。
うん。書いてみたが分かっていない。