« 07.21 2000株の自社株買い | ココ | 07.21 時をかけてみたい »

2007年7月21日

PropertyGridを操る(3)   このエントリーを含むはてなブックマーク 

続報です。

  • (コマンドペイン カスタマイズのための)デザイナ関連の情報
  • 何も入力しないとデフォルト、という処理をさせたい

  • (コマンドペイン カスタマイズのための)デザイナ関連の情報

.NET コンポーネントのためのカスタム デザイナの作成にある、一般的なタスクの単純化(ref. MSDN)が、コマンドペインにコマンド(動詞)を追加する方法を簡単に示している。

Windows フォームのプログラミング カスタム デザイナ(ref. MSDN2)

より詳細な情報はこちらに。ただし、旧MSDNではなく、2.0以降に対応したバージョンになってるけど。1.1でも使えそうな情報あるし。

  • 何も入力しないとデフォルト、という処理をさせたい

文字列として「空("")」を入力したときは数値の0として入力させる、というStringConverterの派生クラスを作って対応可能。

<TypeConverter(GetType(DefaultParamValueConverter))> _
Public Property SomeProperty() As Single
  Get
    Return _value
  End Get
  Set(ByVal Value As Single)
    _value = Value
  End Set
End Property

<Security.Permissions.PermissionSet(Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Friend Class DefaultParamValueConverter
  Inherits StringConverter

  Public Overloads Overrides Function CanConvertTo( _
    ByVal context As System.ComponentModel.ITypeDescriptorContext, _
    ByVal destinationType As System.Type) As Boolean
    If destinationType Is GetType(String) Then Return True
    Return MyBase.CanConvertTo(context, destinationType)
  End Function

  Public Overloads Overrides Function ConvertTo( _
    ByVal context As System.ComponentModel.ITypeDescriptorContext, _
    ByVal culture As System.Globalization.CultureInfo, _
    ByVal value As Object, _
    ByVal destinationType As System.Type) As Object
    If (destinationType Is GetType(String)) AndAlso (CDbl(value) = 0.0#) Then Return ""
    Return MyBase.ConvertTo(context, culture, value, destinationType)
  End Function

  Public Overloads Overrides Function CanConvertFrom( _
    ByVal context As System.ComponentModel.ITypeDescriptorContext, _
    ByVal sourceType As System.Type) As Boolean
    Return MyBase.CanConvertFrom(context, sourceType)
  End Function

  Public Overloads Overrides Function ConvertFrom( _
    ByVal context As System.ComponentModel.ITypeDescriptorContext, _
    ByVal culture As System.Globalization.CultureInfo, _
    ByVal value As Object) As Object
    Dim tc As TypeConverter = TypeDescriptor.GetConverter(context.PropertyDescriptor.PropertyType)
    If CStr(value) = String.Empty Then Return tc.ConvertTo(0.0#, context.PropertyDescriptor.PropertyType)
    If tc.CanConvertFrom(context, value.GetType) Then
      Return tc.ConvertFrom(context, culture, value)
    End If
    Return MyBase.ConvertFrom(context, culture, value)
  End Function
End Class

オーバーライドしたConvertFrom、ConvertToメソッドで、空文字列に対応したコードを記述する。太字の部分が今回「デフォルト」とした数値0なので、その部分をDefaultValueAttribute属性をcontext.PropertyDescriptorから取得するとかをすれば、デフォルト値なら空文字列を表示し、空文字列が入力されればデフォルト値を設定、とできる。

By ただ at 22:58 カテゴリー ; さんぷるライブラリー , PinMarch Samples , VB, VB .net , プログラミング単語帳 , リンク , プログラミング

« 07.21 2000株の自社株買い | 07月の記事 | 07.21 時をかけてみたい »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1034

このリストは、次のエントリーを参照しています: PropertyGridを操る(3):

» VPS from VPS
"[...]PinMarch: PropertyGrid?????????(3)[...]"

トラックバック時刻: 2014年7月 1日 06:31