在自定义控件中隐藏不需要的属性

这是隐藏派生控件中的属性的方法吗?

public class NewButton : Button

 [Browsable ( false )] public new ContentAlignment TextAlign { get; set; } 

此外,这隐藏在devise器的属性窗口中的属性,但我怎样才能隐藏代码中的属性?

从代码中,最接近你可以隐藏它,也许直接调用它是一个痛苦的事情 – 请注意,即使在隐藏的时候它也是可调用的,而且这些都不会超过一个强制types:

 // about the closest you can do, but not really an answer [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] [Obsolete("just cast me to avoid all this hiding...", true)] public new ContentAlignment TextAlign { get; set; } 

就个人而言,我不会打扰。 它不健壮(只是施放)。

您可以使用[EditorBrowsable]属性,如此处所述 。

 [EditorBrowsable(EditorBrowsableState.Never)] public bool HideMeInIntellisense { // ... 

从文档:

… Visual Studio中的IntelliSense引擎使用此属性来确定是否显示属性或方法。

但是,用户可以在VS设置中覆盖它。 ReSharper也有一个设置来控制这个属性是否在其智能感知。

出于好奇,为什么要隐藏用户的东西? 只是因为一个成员隐藏在上面描述的方式并不意味着你不能在代码中使用它并成功地进行编译。 这只会抑制会员的发现。

不,你可以将它们从devise器中删除(如图所示),但是你不能真正隐藏它们的代码,因为这将违反替代原则。 这里已经被问及多次回答,比如看这个问题 。

也许你想要做的是从ContainerControl或UserControl派生,添加一个Button到该控件,只是公开你想保留的Button接口的那些部分。

你为什么不把它变成私人的? 它保证祖先不会看到它。 编辑:在这种情况下,你必须从基地inheritance一个新的类,并使用你的新类,它现在隐藏属性。

 public class MyTextBox: TextBox { ... private new ContentAlignment TextAlign { get { return base.ContentAlignment; } set { base.ContentAlignment = value; } } }