我希望自定义控件根据 Enabled
属性的值提供不同的 BackColor
。我继承了一个 Button
,现在试图隐藏 BackColor
属性以从 View 中隐藏它,然后提供另一个名为 BackColorEnabled
的属性。
这是针对该问题的简化测试用例:
Imports System.ComponentModel
Friend Class StyledButton : Inherits Button
Private _BackColorEnabled As Color
<Browsable(False)>
Friend Shadows Property BackColor As Color
Get
Return MyBase.BackColor
End Get
Set(value As Color)
MyBase.BackColor = value
End Set
End Property
<Browsable(True)>
Friend Property BackColorEnabled As Color
Get
Return _BackColorEnabled
End Get
Set(value As Color)
_BackColorEnabled = value
End Set
End Property
Sub New()
_BackColorEnabled = SystemColors.Control
End Sub
End Class
问题是这两个属性都没有效果,即 BackColor
仍然显示,而 BackColorEnabled
不存在。根据我在网上找到的许多链接,设置 BrowsableAttribute
应该 100% 有效。那么上面的代码有什么问题呢?
最佳答案
似乎 WinForms 设计器 不喜欢将属性声明为 Friend
,并完全忽略它们,即使使用来自同一程序集的控件也是如此。在我将两者都更改为 Public
之后,它就像一个魅力。
据我所知,它不应该造成范围问题,因为类本身可以保持 Friend
。
旁注:我首先花了相当多的时间在一个更大的项目中调试这个问题。然后开始收集有关在 SO 上提问的想法。准备了一个简化的测试用例——然后在几分钟内找到了解决方案。只是觉得与社区分享我的发现会很好。
关于vb.net - 自定义属性未显示在属性窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20228167/