我可以通过将PropertyGrid
设置为包含BrowsableAttributes
个对象的数组,有选择地启用/禁用CategoryAttribute
中的项目。但是,我希望在一个类别中启用一些项目并禁用同一类别中的其他项目,所以我想我会创建自己的自定义属性类并将其应用于我的对象中的属性,但这似乎不起作用。
这是我的自定义属性类:
Public Enum HeadType
DMA = 1
TMA = 2
Both = 0
End Enum
<AttributeUsage(AttributeTargets.Property)>
Public Class HeadTypeAttribute
Inherits Attribute
Public Property HeadType As HeadType
Public Sub New(HeadType As HeadType)
Me.HeadType = HeadType
End Sub
Public Overrides Function Match(obj As Object) As Boolean
Debug.Print("HeadTypeAttribute.Match obj.HeadType=" & obj.HeadType.ToString())
Debug.Print("HeadTypeAttribute.Match Me.HeadType=" & Me.HeadType.ToString())
Dim bMatch As Boolean = TypeOf obj Is HeadTypeAttribute AndAlso CType(obj, HeadTypeAttribute).HeadType = Me.HeadType
Debug.Print(bMatch)
Return bMatch
End Function
End Class
我将BrowsableAttibutes
设置为包含HeadTypeAttribute类的两个实例的数组,一个使用HeadType = HeadType.Both,另一个设置为HeadType.DMA或HeadType.TMA。我可以看到正在调用Match方法,并且对于某些项目返回true,但网格始终为空。
答案 0 :(得分:0)
在BrowsableAttributes中不添加Both项,并且在遇到Both值时将Match函数更改为始终返回True似乎修复了它:
Public Overrides Function Match(obj As Object) As Boolean
Return TypeOf obj Is HeadTypeAttribute AndAlso (CType(obj, HeadTypeAttribute).HeadType = Me.HeadType OrElse CType(obj, HeadTypeAttribute).HeadType = HeadType.Both)
End Function