ネストしたプロパティとTypeConverter

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

TypeConverterを作る前に、まず影に関するプロパティを1つのクラスにまとめます。また、影の方向を表すプロパティも追加します。

コントロールの中身も、このクラスを使用するように変更します。

DesignerSerializationVisibilityは、シリアライズに関する指定で、Contentの場合はオブジェクト全体をシリアライズするという意味になります。指定しなかった場合はVisibleと同じになります。また、シリアライズしないことを指定するにはHiddenにします。

では、いよいよType Converterの登場です。自前のType Converterは、TypeConverterクラスを継承し、名前はClassNameConverterにするのが慣例です。Shadowクラスの場合は、ShadowConverterというクラス名にします。

まずは4つあるメソッドの内の2つを紹介します。なお、VB.NETではSystem.ComponentModelをImportsする必要があります。

CanConvertFromはsourceTypeからオブジェクトへの、CanConvertToはオブジェクトからdestinationTypeへの変換が可能かどうかを返すメソッドです。ここでは、いずれのメソッドとも、対象が文字列の場合にtrueを返し、それ以外の場合は親であるTypeConverterクラスに委ねています。

CanConvertFromメソッドやCanConvertToメソッドがtrueを返すと、引き続き、実際に変換を行うConvertFromやConvertToメソッドが呼ばれます。

ConvertFromではまず、カンマ区切りの文字列をSplitで分解します。分解した文字列の数が3つに満たない場合はデフォルト値を設定するようにしているため、コードがやや長くなっています。

Shadow.Colorでは、ColorConverterという既存のConverterを使って変換します。文字列が正しくない色の場合は例外が発生します。他にも、FontConverter、PointConverter、SizeConverter、Int32Converter、EnumConverterなど、数多くのConverterが用意されています。

Shadow.Directionでは、列挙体の基本クラスであるEnumのParseメソッドを使って変換します。文字列が列挙体にない値の場合は例外が発生します。

ConvertToでは、Formatメソッドを使って文字列を作り出します。

ConvertFromもConvertToも、valueが変換元の型として、想定していないものの場合は、親クラスの各メソッドを呼び出しています。

最後に、ShadowクラスにShadowConverterを使うように指示しましょう。

では、F6キーでコンパイルして、デバッグ用アプリケーションのプロパティウィンドウでShadowの文字列を変更してみてください。ShadowプロパティのsetでInvalidate()を呼んでいるので、文字列を変更するとコントロールに反映されますね。

« »

コメントをどうぞ

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

« »