2007年10月17日水曜日

[.NET]Windows Formコントロールの拡張

WindowsFormの場合、標準でついている共通系コントロールは、デザイナーでプロパティを設定することにより動作や挙動をかえることが出来ます。
しかし、入力チェックをする場合にコントロール1つひとつに対して、コントロールからフォーカスが消えるタイミングでエラーと表示したい場合、ぱっと思いつく方法は、全部のコントロールのサブクラスを作成することです。
しかし、コレは手間がかかり且つ面倒な作業になります、そこで、IExtenderProvider をインプリメントしたコントロールを作成すると、なんと、画面に配備したコントロールにプロパティを追加したりすることが出来ます。
ちょっとしたアスペクト的な動作になります。

私の場合、ErrorProviderのサブクラスを作成し、それにIExtenderProvider をインプリメントし、自動的に入力必須をチェックするコントロールを作成しました。システム共通でコレを使いまわすと意外と開発効率に貢献できそう。

ここにIExtenderProvider を実装したサンプルがあります。
http://msdn.microsoft.com/library/ja/cpguide/html/cpconwinformsextenderprovidersample.asp?frame=true

ここでは、コントロールに制御が移るタイミングで、そのコントロールに紐付けられたメッセージを表示するというものです。コードの例が載っていますが、実装は意外とローテクなんです。。。

まだほかにも応用可能なテクニックになります。たとえばコントロール間の依存関係の自動検証など。
しばらくこの話題に関する情報をつづっていこうと思います。

0 件のコメント: