【问题标题】:Hide Inherited Public Property from Visual Studio Designer / Properties Window从 Visual Studio 设计器/属性窗口隐藏继承的公共属性
【发布时间】:2014-10-29 21:52:01
【问题描述】:

首先,感谢您花时间阅读我的问题。

我在这个问题上花了很多时间但没有成功。我创建了一个继承自 TextBox 的自定义文本框。自定义文本框提供了更高级的建议下拉菜单,具有更好的过滤功能。自定义 TextBox 效果很好,但我想在 Visual Studio 的“属性”窗口中隐藏与原始建议菜单相关的属性:

  • AutoCompleteCustomSource
  • 自动完成模式
  • 自动完成源

我为尝试隐藏这些属性而开发的代码是:

    [ReadOnly(true)]
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    [Obsolete("This property is obsolete.", true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    new private AutoCompleteStringCollection AutoCompleteCustomSource { get; set; }

    [ReadOnly(true)]
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    [Obsolete("This property is obsolete.", true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    new private AutoCompleteMode AutoCompleteMode { get; set; }

    [ReadOnly(true)]
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    [Obsolete("This property is obsolete.", true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    new private AutoCompleteSource AutoCompleteSource { get; set; }

我使用的来源是:

属性仍在显示中。请提供一个工作示例或一个参考。

再次感谢您抽出宝贵的时间。

【问题讨论】:

  • 将私有改为公共。
  • 他们必须是公开的。您可以隐藏属性,但始终可以通过代码访问它们。继承附带的合同的一部分。
  • 哇。我不敢相信事情就这么简单。非常感谢,成功了!
  • 如何将您的评论标记为答案?

标签: c# winforms visual-studio designer browsable


【解决方案1】:

在您的实际代码中,您真的使用new 关键字来允许您声明的属性隐藏基类属性吗?

如果是这样,那么在我看来,VS 设计器中显示的属性很可能不是您自己的,而是基类属性。

请注意,这只发生在您还更改了属性的可访问性时(例如,基类属性为 public 但您自己的派生类属性为 private)。

再举一个例子,说明为什么隐藏继承的成员几乎总是错误的。

【讨论】:

  • 我隐藏了基类属性,以防止与我的建议下拉菜单的高级属性混淆。通过将私有更改为公共解决了该问题。感谢您的回复。
  • 正确。正如我在回答中所写:“请注意,这只发生在您还更改了属性的可访问性时”。如果您修复了可访问性,使其像在基类中一样保持“公共”,您将获得您想要的行为。我实际上在我的回答中指出了这一点......我猜你只是没有注意到。
  • 您说:“在您的实际代码中,您真的使用 new 关键字来允许您声明的属性隐藏基类属性吗?如果是这样,那么在我看来最有可能显示的属性VS Designer 中的不是你自己的,而是基类属性。”我在回答你的问题。我有足够的能力“注意到”你的回答。我不同意你的评论:“这只是一个例子,说明为什么隐藏继承的成员几乎总是错误的。”但这不是一个讨论论坛。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2011-10-06
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多