Скрытие нежелательных свойств в пользовательских элементах управления
Является ли это способом скрытия свойств в производных элемента управления?
public class NewButton : Button
...
[Browsable ( false )]
public new ContentAlignment TextAlign { get; set; }
Также это скрывает свойство в окне свойств в конструкторе, но как я могу скрыть свойство в коде?
Ответы
Ответ 1
Из кода, ближайшего вы можете сделать это, чтобы скрыть его, и, возможно, сделать это больно, чтобы позвонить прямо - обратите внимание, что даже когда скрытый он может быть вызван, и ни одно из них не будет работать после трансляции:
// 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; }
Лично я не стал бы беспокоиться. Он не является надежным (просто отличным).
Ответ 2
Вы можете использовать атрибут [EditorBrowsable]
, как описанный здесь.
[EditorBrowsable(EditorBrowsableState.Never)]
public bool HideMeInIntellisense
{
// ...
Из документации:
... движок IntelliSense в Visual Studio использует этот атрибут, чтобы определить, показывать ли свойство или метод.
Однако пользователи могут переопределить это в настройках VS. ReSharper также имеет параметр, который контролирует, соблюдается ли этот атрибут в IntelliSense.
Из любопытства, почему вы хотите что-то скрывать от пользователей? Просто потому, что элемент скрыт описанным выше способом, это не означает, что вы не можете использовать его в коде и скомпилировать его успешно. Это просто препятствует обнаружению члена.
Ответ 3
Возможно, что вы хотите сделать, это вывод из ContainerControl или UserControl, добавьте кнопку к этому элементу управления и просто покажите те части интерфейса Button, которые вы хотите сохранить.
Ответ 4
Нет, вы можете удалить их из конструктора (как показано), но вы не можете скрыть их код формы, поскольку это нарушит принцип подстановки. Его спрашивали и много раз говорили здесь, см., Например, этот вопрос SO.
Ответ 5
Почему бы вам не сделать это частным? Это гарантирует, что предки этого не видят.
Редактировать:
В этом случае вам нужно наследовать новый класс из базы и использовать свой новый класс, который теперь скрывает свойство.
public class MyTextBox: TextBox
{
...
private new ContentAlignment TextAlign
{
get { return base.ContentAlignment; }
set { base.ContentAlignment = value; }
}
}