【发布时间】:2016-08-24 12:11:58
【问题描述】:
注意:这个问题也被标记为 C#,因为它是一个一般性问题,并且 描述在 C# 中使用 this 的答案对我来说非常好。
我最近一直在 .Net 框架中探索 PropertyGrid。我已经检查了这个属性 (BrowsableAttributes),但我不知道它的用途。
起初我认为这将能够遍历您的SelectedObject 中的每个BrowsableAttribute,然后您将能够找到原始属性,这将很有用。
但不,显然这个属性所做的只是给你一个AttributeCollection,只包含BrowsableAttribute,全部设置为True...
有人能告诉我这种方法有什么意义吗?我什至不明白它在 .NET 中有何用处……
Dim attributes = MyPropertyGrid.BrowsableAttributes
For Each A As Attribute In attributes
Dim Browsable As BrowsableAttribute = CType(A, BrowsableAttribute)
'Then how can I use this ? it's only property is Browsable (True/False)
Next
我最初试图解决一个问题,我不知道在属性网格中选择了哪个对象,但我想收集对象的数据。
我不知道对象的类型是什么,因为它来自动态加载的 DLL。我只知道它是另一个我知道的派生类。但我对备份从属性网格获得的对象属性很感兴趣,以便以后能够保存和加载它们。
由于属性网格已经包含所有这些值,我认为这种属性可能是编写更多代码的捷径。我不想在 Property Grid 已经完成的情况下使用反射来检查代码。
【问题讨论】:
-
你为什么想要使用它?您是否正在尝试解决一些问题(哪个?)并认为可以使用此属性还是学术问题“
RandomClass.RandomProperty有什么用处”?答案在关于PropertyGrid和msdn 的教程中。 -
@Sinatr 我更新了我的问题,但答案不在教程中,我已经在那些 msdn 页面上花了一些时间来弄清楚。
-
“我不知道在属性中选择了哪个对象” - 又是XY problem。 为什么您需要知道这一点?做什么?
PropertyGrid.SelectedObject是对象,可以使用is或者GetType()来判断类型。 -
@Sinatr 再次更新。我可以再次解释为什么我需要从 DLL 中探索一个对象,但这会要求我完全解释我的项目......我试图将问题缩小到相关的范围......
-
PropertyGrid使用TypeDescriptor机制使用TypeDescriptor.GetProperties(component, attributes)获取SelectedObject的属性。该方法根据传递的属性返回传递的对象的过滤属性。如文档中所述,只有属性与指定值匹配的属性才会显示在 PropertyGrid 中。默认值为仅包含 BrowsableAttribute.Yes. 的 AttributeCollection。您可以在答案中找到更多描述和一些链接。
标签: c# .net vb.net winforms propertygrid