什么';这是PropertyGrid的兴趣所在.浏览属性
本文关键字:浏览 属性 这是 PropertyGrid 什么 | 更新日期: 2023-09-27 18:03:57
注意:这个问题也被标记为C#,因为它是一个一般问题描述这个在C#中的使用的答案对我来说非常好。
我最近一直在中探索PropertyGrid。Net框架。我已经检查了这个属性(BrowsebleAttributes(,我不知道它的用途
起初,我认为这将能够循环通过SelectedObject
中的每个BrowsableAttribute
,然后您将能够找到原始属性,这将是有用的。
但不,显然这个属性所做的只是给你一个只包含BrowsableAttribute
的AttributeCollection
,全部设置为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。我只知道它是另一个的派生类,我知道。但我很感兴趣的是备份从属性网格获得的对象属性,以便以后保存和加载它们
由于属性网格已经包含了所有这些值,我认为这种属性可以作为编写更多代码的工具。我不想在属性网格已经检查代码的情况下使用反射来检查代码。
PropertyGrid使用类似于此答案的方法迭代对象的所有属性。在执行此操作时,它会检查与该属性关联的所有属性,并检查是否能找到与AttributeCollection匹配的属性(示例代码,如何执行此操作在此处(。如果它能找到它,它就会显示在属性网格中,否则就不会。
其目的是,如果需要黑名单支持,您可以隐藏公共属性以显示在属性网格中,方法是用[Browsable(false)]
标记它。如果您喜欢白名单方法,可以定义自己的属性,将其应用于所有所需属性,并将BrowsableAttribute
设置为仅包含自己属性的集合。
BrowsableAttributes
属性的工作已经在文件中明确描述:
只有属性与指定值匹配的属性显示在PropertyGrid中。默认值是AttributeCollection仅包含BrowsebleAttribute。对
但它是如何工作的
。NET框架有两种机制来查找某一类型的元数据:
- 反射API
- TypeDescriptor机制
对于类型,通过反射返回的元数据是不可扩展的,并且在编译该类型后不能修改,而通过TypeDescriptor
返回的元数据可以使用IExtenderProvider
、ITypeDescriptorFilterService
或ICustomTypeDescriptor
进行更改。
例如,这是一种类型描述机制,使设计者能够添加一些设计时属性,这些属性不是对象的实际属性,如Modifier
、Locked
或GenerateMember
。
PropertyGrid
使用TypeDescriptor
机制以这种方式获取属性:
var properties = TypeDescriptor.GetProperties(component, attributes);
它依赖于TypeDescriptor.GetProperties
方法,您可以在文档的备注部分找到过滤规则。
上述方法中的component
是PropertyGrid
的SelectedObject
,attributes
是BrowsableAttributes
属性,并且如文献中所述,只有属性与指定值匹配的属性才会显示在PropertyGrid
中。由于默认情况下,根据惯例,我们期望具有[Brawsable(false)]
的属性不会显示在PropertyGrid
中,因此该属性包含一个值为Yes
的Browsable
属性。