什么';这是PropertyGrid的兴趣所在.浏览属性

本文关键字:浏览 属性 这是 PropertyGrid 什么 | 更新日期: 2023-09-27 18:03:57

注意:这个问题也被标记为C#,因为它是一个一般问题描述这个在C#中的使用的答案对我来说非常好。

我最近一直在中探索PropertyGrid。Net框架。我已经检查了这个属性(BrowsebleAttributes(,我不知道它的用途

起初,我认为这将能够循环通过SelectedObject中的每个BrowsableAttribute,然后您将能够找到原始属性,这将是有用的。

但不,显然这个属性所做的只是给你一个只包含BrowsableAttributeAttributeCollection,全部设置为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的兴趣所在.浏览属性

PropertyGrid使用类似于此答案的方法迭代对象的所有属性。在执行此操作时,它会检查与该属性关联的所有属性,并检查是否能找到与AttributeCollection匹配的属性(示例代码,如何执行此操作在此处(。如果它能找到它,它就会显示在属性网格中,否则就不会。

其目的是,如果需要黑名单支持,您可以隐藏公共属性以显示在属性网格中,方法是用[Browsable(false)]标记它。如果您喜欢白名单方法,可以定义自己的属性,将其应用于所有所需属性,并将BrowsableAttribute设置为仅包含自己属性的集合。

BrowsableAttributes属性的工作已经在文件中明确描述:

只有属性与指定值匹配的属性显示在PropertyGrid中。默认值是AttributeCollection仅包含BrowsebleAttribute。对

但它是如何工作的

。NET框架有两种机制来查找某一类型的元数据:

  • 反射API
  • TypeDescriptor机制

对于类型,通过反射返回的元数据是不可扩展的,并且在编译该类型后不能修改,而通过TypeDescriptor返回的元数据可以使用IExtenderProviderITypeDescriptorFilterServiceICustomTypeDescriptor进行更改。

例如,这是一种类型描述机制,使设计者能够添加一些设计时属性,这些属性不是对象的实际属性,如ModifierLockedGenerateMember

PropertyGrid使用TypeDescriptor机制以这种方式获取属性:

var properties = TypeDescriptor.GetProperties(component, attributes);

它依赖于TypeDescriptor.GetProperties方法,您可以在文档的备注部分找到过滤规则。

上述方法中的componentPropertyGridSelectedObjectattributesBrowsableAttributes属性,并且如文献中所述,只有属性与指定值匹配的属性才会显示在PropertyGrid中。由于默认情况下,根据惯例,我们期望具有[Brawsable(false)]的属性不会显示在PropertyGrid中,因此该属性包含一个值为YesBrowsable属性。