C# 从Visual Studio设计器/属性窗口隐藏继承的公共属性
首先,感谢您抽出时间阅读我的问题 我在这个问题上花了很多时间,但没有成功。我创建了一个从TextBox继承的自定义TextBox。自定义文本框提供了更高级的建议下拉菜单,具有更好的筛选功能。自定义文本框工作得很好,但我想从Visual Studio的“属性”窗口中隐藏与原始建议菜单相关的属性:C# 从Visual Studio设计器/属性窗口隐藏继承的公共属性,c#,winforms,visual-studio,designer,browsable,C#,Winforms,Visual Studio,Designer,Browsable,首先,感谢您抽出时间阅读我的问题 我在这个问题上花了很多时间,但没有成功。我创建了一个从TextBox继承的自定义TextBox。自定义文本框提供了更高级的建议下拉菜单,具有更好的筛选功能。自定义文本框工作得很好,但我想从Visual Studio的“属性”窗口中隐藏与原始建议菜单相关的属性: 自动完成自定义源 自动完成模式 自动完成源 我为尝试隐藏这些属性而开发的代码是: [ReadOnly(true)] [Browsable(false), EditorBrowsable
- 自动完成自定义源
- 自动完成模式
- 自动完成源
[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; }
我使用的来源是:
再次感谢您占用我的时间。在您的实际代码中,您是否真的使用
new
关键字来允许您声明的属性隐藏基类属性
如果是这样,那么在我看来,VS设计器中显示的属性很可能不是您自己的,而是基类属性
请注意,仅当您同时更改属性的可访问性时才会发生这种情况(例如,基类属性为public
,而您自己的派生类属性为private
)
再举一个例子,说明为什么隐藏继承成员几乎总是错误的。将private更改为public。它们必须是public。您可以隐藏属性,但它们始终可以通过代码访问。继承合同的一部分。哇。我不敢相信事情竟那么简单。太感谢你了,真是太好了!如何将您的评论标记为答案?我正在隐藏基类属性,以避免与我的建议下拉菜单的高级属性混淆。这一问题通过将私人变为公共解决。谢谢你的回复。正确。正如我在回答中所写:“请注意,只有当您同时更改属性的可访问性时,才会发生这种情况。”。如果您修复了可访问性,使其保持在基类中的“公共”状态,则可以获得所需的行为。我在回答中确实指出了这一点……我想你只是没有注意到。你说:“在实际代码中,是否确实使用new关键字允许声明的属性隐藏基类属性?如果是这样,那么在我看来,VS设计器中显示的属性很可能不是您自己的,而是基类属性。”我回答了您的问题。我有足够的能力“注意”您的回答。我不同意您的评论:“再举一个例子,说明为什么隐藏继承成员几乎总是错误的。“但这不是一个讨论论坛。