Reputation: 331062
Is this the way to hide properties in derived controls?
public class NewButton : Button
...
[Browsable ( false )]
public new ContentAlignment TextAlign { get; set; }
Also this hides the property in the Properties window in the designer but how can I also hide the property in code?
Upvotes: 25
Views: 28268
Reputation: 621
Why don't you make it private? It guarantees that ancestors will not see it. Edit: In this case you have to inherit a new class from the base and use your new class, which now hides ths property.
public class MyTextBox: TextBox
{
...
private new ContentAlignment TextAlign
{
get { return base.ContentAlignment; }
set { base.ContentAlignment = value; }
}
}
Upvotes: 0
Reputation: 1062865
From code, the closest you can do it to hide it, and perhaps make it a pain to call directly - note that even when hidden it is callable, and none of this will work past a cast:
// 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; }
Personally, I wouldn't bother. It isn't robust (just cast).
Upvotes: 31
Reputation: 14157
Maybe what you want to do is derive from ContainerControl or UserControl, add a Button to that control and just expose those parts of the Button interface you want to keep.
Upvotes: 1
Reputation: 310917
You can use the [EditorBrowsable]
attribute, as documented here.
[EditorBrowsable(EditorBrowsableState.Never)]
public bool HideMeInIntellisense
{
// ...
From the documentation:
...the IntelliSense engine in Visual Studio uses this attribute to determine whether to show a property or method.
However, users can override this in VS settings. ReSharper also has a setting that controls whether this attribute is honoured in its IntelliSense.
Out of curiousity, why do you want to hide something from users? Just because a member is hidden in the way described above doesn't mean you couldn't use it in code and compile it successfully. It just inhibits the discoverability of the member.
Upvotes: 3
Reputation: 273264
No, you can remove them from the designer (as shown) but you cannot really hide them form code as that would violate the substitution principle. It has been asked & answered many times here, see for example this SO question.
Upvotes: 1