今回はConvertFrom関係。前の記事で書いたように「ある型・クラスから、このTypeConverterで扱う型・クラスに変換」にちなんだ処理を行うのがこのメソッド。
プロパティダイアログで利用する場合は「String ←→ System.Type」と変換できればよいので、CanConvertFromメソッドでは、ある型=StringであればTrueを返却するようにコーディングすればOK。
''' <summary>指定したコンテキストを使用して、コンバータが特定の型のオブジェクトをコンバータの型に変換できるかどうかを示す値を返します</summary>
Public Overrides Function CanConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal sourceType As System.Type) As Boolean
If sourceType Is GetType(String) Then Return True
Return MyBase.CanConvertFrom(context, sourceType)
End Function
こんな感じで大丈夫。そしてConvertFromメソッドでは実際の変換処理を記述してあげればOK。内部でプロパティでSystem.Typeを指定したい?(3)の時に書いたロジックを使うのでそこも参照してください。
''' <summary>指定したコンテキストとカルチャ情報を使用して、指定したオブジェクトをコンバータの型に変換します</summary>
Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
If TypeOf value Is String Then
For Each child As System.Type In Me.GetClassList(context)
If child.Name.Replace(child.Namespace, "") = value.ToString Then
Dim result As Object = Nothing
result = System.Activator.CreateInstance(child)
Return result.GetType
End If
Next
Return Nothing
End If
Return MyBase.ConvertFrom(context, culture, value)
End Function
こんな具合かな?利用できるクラスの一覧を取得して、一覧に存在するクラスが指定された際にはそのTypeを返却する。一覧に存在しない際はNullを返却する。返却する際には一覧で保持しているクラス名から、実際のインスタンスを生成(System.Activator.CreateInstance)して、そのTypeを取得しています。
とまあ、こんな感じでFrom関係のメソッドも大したことがないのよね。To関係のメソッドもそれほど違いはないので、次回の記事と見比べてもらうといいかも。
0 件のコメント:
コメントを投稿