使用自定义属性禁用 PropertyGrid 中的项目
Disabling items in PropertyGrid using Custom Attributes
我可以通过将 BrowsableAttributes
设置为包含 CategoryAttribute
个对象的数组来选择性地启用/禁用 PropertyGrid
中的项目。但是,我希望启用一个类别中的某些项目并禁用同一类别中的其他项目,所以我想我会创建自己的自定义属性 class 并将其应用于我的对象中的属性,但这似乎并没有工作。
这是我的自定义属性 class:
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 class 的两个实例,一个 HeadType = HeadType.Both,另一个设置为 HeadType.DMA 或 HeadType.TMA.我可以看到正在调用 Match 方法并为某些项目返回 true,但网格始终为空。
不在 BrowsableAttributes 中添加 Both 项并将 Match 函数更改为始终 return 当遇到 Both 值时为真似乎可以修复它:
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
我可以通过将 BrowsableAttributes
设置为包含 CategoryAttribute
个对象的数组来选择性地启用/禁用 PropertyGrid
中的项目。但是,我希望启用一个类别中的某些项目并禁用同一类别中的其他项目,所以我想我会创建自己的自定义属性 class 并将其应用于我的对象中的属性,但这似乎并没有工作。
这是我的自定义属性 class:
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 class 的两个实例,一个 HeadType = HeadType.Both,另一个设置为 HeadType.DMA 或 HeadType.TMA.我可以看到正在调用 Match 方法并为某些项目返回 true,但网格始终为空。
不在 BrowsableAttributes 中添加 Both 项并将 Match 函数更改为始终 return 当遇到 Both 值时为真似乎可以修复它:
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