« 07.18 PropertyGridを操る(0) | ココ | 07.19 PropertyGridを操る(2) »
2007年7月19日
PropertyGridを操る(1)
PropertyGrid.SelectedObjectにあるオブジェクトを入れると、そのオブジェクトのPublic Property...で宣言されたプロパティが表示される。
- PropertyGridに表示させないようにする場合は <Browsable(False)>
- デザイン時読み込みのみにする場合は <[ReadOnly](True)>
- resxファイルに保存させないようにするには <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
とまあ、簡単に分かる属性はさておき。
ここでは、あるクラスSampleClassを、PropertyGridでプロパティを編集するクラスとして、利用する。このSampleClassに、いろいろプロパティを宣言して遊ぶ。
Class SampleClass
End Class
この状態で、 PropertyGrid1.SelectedObject = New SampleClass としても、何も表示されないのは当然。この状態から、プロパティを追加する。
- デフォルト値以外が表示されるときに太字になるのを何とかしたい。
<DefaultValue(...)> もしくは、ShouldSerialize...メソッドを使うことで既定値を設定すると、既定値のときは太字にならない。『常に太字にならない』ようにするには、DefaultValueAttributeをいちいち操作することよりも、ShouldSerialize...メソッドを使った方が遥かに簡単。
Private _dat As String
Public Property SampleData1() As String
Get
Return _dat
End Get
Set(ByVal value As String)
_dat = value
End Set
End PropertyPrivate Function ShouldSerializeSampleData1() As Boolean
Return False
End Function
もちろん、シリアライズされなくなるのでシリアライズが必要な場合には適当な条件分岐が必要。
- カテゴリ名を多言語化したい。
<Category("categoryName")> でカテゴリを指定できるけれども、カテゴリ名を多言語化する必要がある場合、CategoryAttributeから派生させたLocCategoryAttributeといったクラスを宣言し、GetLocalizedString()をオーバーライドする。
Public Class LocCategoryAttribute
Inherits System.ComponentModel.CategoryAttributePublic Sub New(ByVal category As String)
MyBase.New(category)
End SubProtected Overrides Function GetLocalizedString(ByVal value As String) As String
Dim resman As Resources.ResourceManager = New Resources.ResourceManager("MyRes", Me.GetType.Assembly)
Dim res = resman.GetString(value)
If IsNothing(res) Then res = MyBase.GetLocalizedString(value)
Return res
End FunctionEnd Class
- 説明を多言語化したい。
プロパティの説明は、<Description("...")> でできると簡単に分かるんやけど、これが多言語化となるとCategoryのようなオーバーライドする関数がないからどうすればいいのか困る。けど、やり方としては同じ。DescriptionAttributeを派生させて、Descriptionプロパティをオーバーライドする。
Public Class LocDescriptionAttribute
Inherits System.ComponentModel.DescriptionAttributePublic Sub New(ByVal description As String)
MyBase.New(description)
End SubPublic Overrides ReadOnly Property Description() As String
Get
' Localizing process will be written hereReturn MyBase.Description
End Get
End PropertyEnd Class
同様の解説が、コンポーネント開発者のための Tips その2(ref. 失われたアークを求めて)にもある。
By ただ at 03:14 カテゴリー ; さんぷるライブラリー , PinMarch Samples , VB, VB .net , プログラミング単語帳 , リンク , プログラミング
« 07.18 PropertyGridを操る(0) |
07月の記事
| 07.19 PropertyGridを操る(2) »
トラックバック
このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1031