vb.net - 自定义属性未显示在属性窗口中

标签 vb.net winforms custom-controls

我希望自定义控件根据 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/

相关文章:

vb.net - 对非共享成员的引用需要 VB.net 中的对象引用

c# - CryptoAPITransform 使用正确吗?内存泄漏

c# - 有些键盘比其他键盘更啰嗦吗?

c# - 已启用的组合框控件在 Windows 10 中看起来已禁用?

c# - 无法解析 UWP App 中 System.Runtime 的范围

delphi - 如何将字形属性添加到我的自定义组件?

vb.net - VB.Net 中的 CheckBoxFor Nullable Boolean

vb.net - VB6 到 VBNet - ListBox.Selected

c# - 如何编写运行一次且仅运行一次的代码

c# - 我需要一个 .NET 自定义控件库