Скрытие нежелательных свойств в пользовательских элементах управления - PullRequest
16 голосов
/ 07 октября 2009

Это способ скрыть свойства в производных элементах управления?

public class NewButton : Button

...

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

Также это скрывает свойство в окне «Свойства» в конструкторе, но как я могу также скрыть свойство в коде?

Ответы [ 5 ]

24 голосов
/ 07 октября 2009

Из кода, самое близкое, что вы можете сделать, чтобы скрыть его, и, возможно, сделать вызов прямым вызовом - заметьте, что даже когда он скрыт, он вызывается, и все это не будет работать после приведения:

// 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 голосов
/ 07 октября 2009

Вы можете использовать атрибут [EditorBrowsable], как указано здесь .

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

Из документации:

... движок IntelliSense в Visual Studio использует этот атрибут, чтобы определить, показывать ли свойство или метод.

Однако пользователи могут изменить это в настройках VS. ReSharper также имеет настройку, которая контролирует, учитывается ли этот атрибут в IntelliSense.

Из любопытства, почему вы хотите что-то скрыть от пользователей? Тот факт, что элемент скрыт описанным выше способом, не означает, что вы не можете использовать его в коде и успешно скомпилировать. Это просто препятствует обнаружению члена.

1 голос
/ 07 октября 2009

Нет, вы можете удалить их из конструктора (как показано), но вы не можете скрыть их от кода формы, поскольку это нарушит принцип подстановки. Здесь задавали и отвечали много раз, см. Например этот ТАК вопрос .

1 голос
/ 07 октября 2009

Может быть, вы хотите получить из ContainerControl или UserControl, добавить Button к этому элементу управления и просто открыть те части интерфейса Button, которые хотите сохранить.

0 голосов
/ 29 марта 2013

Почему бы тебе не сделать это приватным? Это гарантирует, что предки не увидят этого. Редактировать: В этом случае вам нужно унаследовать новый класс от базового и использовать новый класс, который теперь скрывает это свойство.

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