使用自定义属性禁用PropertyGrid中的项目

时间:2015-02-27 09:15:20

标签: .net custom-attributes propertygrid

我可以通过将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,但网格始终为空。

1 个答案:

答案 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