UITypeEditorからは、.NETのプロパティの親に適用される属性を取得
-
21-09-2019 - |
質問
これはタイトルが言うように非常に簡単ではないようだが、私はあなたが理解してほしい。
このシナリオを検討します:
Class MyClass
Property SubProp1
End Property
-TypeEditor(whatever)-
Property SubProp2
End Property
End Class
Class MyButton
Inherits Button
-MyCustomAttribute-
Property MC as MyClass
End Property
End Class
次に、私は財産MCと編集SubProp2を展開し、プロパティグリッドにMyButtonというのインスタンスを配置します。
SubProp2の型エディタから、私はプロパティMCに適用される属性のホールドを取得したい。
文脈を見ると、PropertyDescriptor.ComponentTypeは、我々はタイプに到着:MyClassのを。 属性の私見てても、MyClassのに適用される場合、それは属性のみが返されますMyClassのに直接適用され、余分な属性がプロパティMCには適用されません。
私は属性が存在適用読むことができるように戻ってMCに取得するために苦労しています。 誰でも任意のアイデア?
ETAます:
私は以下のことに答えてきました。
解決 2
実際には、さらにトーマスに私のコメントに、これは後半に結合することなく可能です。ここでの方法:
DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.
出来上がり!
他のヒント
私は属性を見れば、それだけで属性を返すでしょうが、MyClassのに適用されるには、MyClassのに直接適用され、余分な属性がプロパティMCには適用されません。
MC
プロパティに追加属性は属性に「追加」されていないが、MyClass
クラスに適用されるタイプのMyClass
の性質がこれを持っているという理由だけで...属性は、静的なメタデータです、あなたはMyClass
に余分な属性を持っていません。属性。 2の間には関係がありません。
は、反射によって、MyButton
クラスから直接それらを取得しない限り、MyClassのは、MCプロパティの属性を取得するための方法はありません。
Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)
しかし、あなたはそれだけではないの性質上、あなたのタイプに定義された属性を与えることができるので、TypeDescriptor
を使用してこれらの属性を取得することができません。