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

时间:2009-10-06 22:09:36

标签: c# .net winforms gdi+

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

public class NewButton : Button

...

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

此外,这会在设计器的“属性”窗口中隐藏属性,但是如何在代码中隐藏属性?

5 个答案:

答案 0 :(得分:23)

从代码中,最接近你可以隐藏它,也许直接调用也很麻烦 - 请注意,即使隐藏它也是可调用的,并且这些都不会通过强制转换:

// 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; }

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

答案 1 :(得分:2)

您可以将[EditorBrowsable]属性用作documented here

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

来自文档:

  

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

但是,用户可以在VS设置中覆盖此设置。 ReSharper还有一个设置,用于控制是否在其IntelliSense中使用此属性。

出于好奇,你为什么要隐藏用户的东西?仅仅因为成员以上述方式隐藏并不意味着您无法在代码中使用它并成功编译它。它只是抑制了成员的可发现性。

答案 2 :(得分:1)

也许您想要做的是从ContainerControl或UserControl派生,向该控件添加一个Button,只展示您想要保留的Button界面的那些部分。

答案 3 :(得分:1)

不,你可以从设计师那里删除它们(如图所示),但你不能真正隐藏它们的表单代码,因为这会违反替换原则。有人问过&这里多次回答,例如this SO question

答案 4 :(得分:0)

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

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