Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Visual Studio设计器/属性窗口隐藏继承的公共属性_C#_Winforms_Visual Studio_Designer_Browsable - Fatal编程技术网

C# 从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

首先,感谢您抽出时间阅读我的问题

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

  • 自动完成自定义源
  • 自动完成模式
  • 自动完成源
我为尝试隐藏这些属性而开发的代码是:

    [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设计器中显示的属性很可能不是您自己的,而是基类属性。”我回答了您的问题。我有足够的能力“注意”您的回答。我不同意您的评论:“再举一个例子,说明为什么隐藏继承成员几乎总是错误的。“但这不是一个讨论论坛。