TypeConverterその他の機能

カスタムコントロール作成入門講座中級編

ShadowクラスのDirectionプロパティは列挙型です。そして、列挙型の場合は、プロパティウィンドウでドロップダウンコンボボックスで選択することができます。実は、このドロップダウン、任意の型で使用することができます。

例として、ShadowクラスのDepthプロパティに実装してみましょう。Depthはint型なので、Int32Converterを継承したType Converterを作ります。

ドロップダウンの機能を有効にするにはGetStandardValuesSupportedでtrueを返します。GetStandardValuesExclusiveは、ドロップダウンの中の値以外を受け付けないようにする時にtrueを返します。Depthではこの制限がないのでfalseを返しています。GetStandardValuesで、ドロップダウンに表示する項目を設定して返します。

もしドロップダウンの中の値を文字列にしたい場合は、StringConverterを継承して、GetStandardValuesでstringの配列を使用するようにします。

後は、DepthプロパティにこのType Converterを使うように指示するだけです。

簡単ですね。もっと複雑な編集方法を提供したい場合は、カスタムプロパティエディタを作れば可能になりますが、それは次回以降に紹介します。

※※※以下は未解決情報です※※※

C#でInitializeComponentを見てみると、次のようになっています。

Shadowの各項目が1つ1つ初期化されていますね。では、3つの項目を同時に初期化したい場合にはどうすればいいでしょうか。次のようにShadowも、SizeやFontと同じような初期化の仕方ができれば、それが可能になるはずです。

そのためにはまず、3つの引数を持つコンストラクターを作ります。

続いて、このコンストラクターを使うように、TypeConverterに変更を加えますが、先にusing/Importsを指定します。

そして、CanConvertToとConvertToを、InstanceDescriptorに対応させます。

ところが、これがうまく行きません。Shadowの項目を変更しても、InitializeComponentにまったく保存されなくなってしまいました。

これがそのC#のソースファイルVB.NETのソースファイルです。なにかお気づきの方いましたら、掲示板でお知らせください。

«

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

«