Validatingの罠。

罠というかなんというか、自分が知らなかっただけですが・・・。
  
自分はWebアプリの経験の方が多く、C/SでのValidationはどうやるのか今まで知らずにいました(汗

結局はコントロールのValidatingイベントで行えばいいのですが、このValidatingイベントがクセのある奴でやっかいです。
  
・その1
入力検証でNGとした場合にメッセージボックスを表示するとValidatingイベント内で
e.Cancel = True;
でフォーカスの移動をキャンセルしていない場合、フォーカスを移動しようとしていたコントロールによっては想定外の動きになってしまう。
CheckedListBox上でマウスカーソルを移動させると選択反転がついて回ってくる上に、CheckedListBoxコントロール外でクリックすると、最後に選択反転になった項目のチェックボックスがON/OFFされてしまいます・・。
(CheckedListBoxはシングルクリックでチェックボックスON/OFができるようにプロパティを設定)
メッセージボックスを出さなければ問題ないと思います。
でもフォーカス移動のキャンセルができるのがValidatingイベントの利点なので使わないのは間違いですよね(;^ω^)
素直にe.Cancel = True;を追記しました。
  
・その2
FormのClosingイベントでValidatingイベントが勝手に走る。
入力エラーがあると画面を閉じれないという事態に・・・。
Formの×ボタンでも発生してしまいます。
これを回避するためには
A:入力検証をValidatingイベントではなくLeaveイベントで行う
もしくは
B:Validatingイベント内で特定のコントロールにフォーカスがある場合は入力チェックをキャンセルするようにする
の2パターンあるようです。
  
今回はBでしのぎました。
入力項目が1つしかないシステムなのでこれで問題ないと思いますが、入力項目が多数ある場合はなんだか面倒な事になりそうだなあ、と思いました。