質問: ActiveControl as IValidator; if (validator != null) { if(! validator.ValidateInvalidValue()) { return false; } } // 全体のチェック } } ```
回答: イベントの概念についての理解がおかしい気がします。 イベントというのは何らかの事象が発生したことをそのコンポーネント(クラス)の「外部」に通知するためのものですので、今回の例で言えばCustomTextBoxのイベントをForm上から発火しようとしているのがまずイベントの使い方として間違っています。 Form上で実装するのはそのイベントの通知を受けて実行する処理(イベントハンドラ)です。 実際のチェックはそのイベントハンドラ内で「チェック処理」というメソッドを呼び出すようにしてやればいいので、今回のケースだとCustomTextBoxで`OnValidating`をオーバーライドしているのもちょっと意図がよくわかりません。 VBのRaiseEventを例として挙げられていますが、それもイベントを発火するクラス(今回の例で言えばCustomTextBox)の「内部」で使うものであり、「外部」から使うものではありません。(つまりC#だからできない、というわけではありません) リフレクションを使う方法も、仮にそれで上手くいったとしても論外です。 入力値検証を`Validating`イベントを使ってやる場合、そのタイミングのコントロールは`Form.AutoValidate`プロパティや`Control.CausesValidation`でタイミングを制御するものですので、そこら辺の使い方を調べられると良いと思います。