2007年9月7日金曜日

プロパティでSystem.Typeを指定したい?

あるクラスのプロパティでSystem.Typeなものを指定したい場合というのは結構あるだろうし、普通にロジックで

Public Property DummyType As System.Type
End Property

なんて実装してしまえばできるから使っている人は多いと思う。で、今回の伝票レイアウトな話題でも、それを利用しているんだけど単純にロジック書くだけではちょっと問題があるんですな、DataGridView関連では。

それは「InitializeComponentメソッドで処理されないプロパティは、明示的に対応処理を行わないといけない」という問題。DataGridViewで有名どころはデザイン時のRowTemplate関連かな?こいつはデザイン時にプロパティを設定しても、デザイン画面では即座に反映されてくれない。一度表示されている行を消して、その後に戻してあげないといけないんだよね。仕様としてRowTemplate関連は「行を追加する」タイミングでしか適用されないので、仕様通りっちゃーその通りなんですな。
これと似ていて、ある種のプロパティはInitializeComponent内部で操作されていないと、実装者がロジックでゴリゴリ対応してもらわないといけない状態になるんだよね。そして普通にSystem.Typeなプロパティは標準で設定するダイアログといういのがないのでInitializeComponent内部で設定してもらうことができない → 実装者がゴリゴリ、となってしまうわけだ。こりゃあ使いづらい。というかバグ出してくれそうw

ではどうするか、というとSystem.ComponentModel.TypeConverterというクラスを利用することになります。これは「変換」を行うためのクラスで、「文字列→インスタンス」とか「インスタンス→文字列」なんてことをするために利用するね。今回ではプロパティダイアログ上で、「クラスを選択→クラス名を文字列で」と「クラス名→System.Type」という機能が必要なので用意することにします。

詳しい話は次回以降。

0 件のコメント:

コメントを投稿