Поиск и использование скрытых свойств (таких как DisplayRectangle) - PullRequest
1 голос
/ 14 сентября 2010

Во многих примерах кода я обнаружил свойство DisplayRectangle используемого элемента Control. Однако это свойство не появляется во всплывающем окне intellisense, равно как и не получает подсветку синтаксиса, но оно компилируется и работает как положено.

Должен ли я использовать этот вид недвижимости?

Как узнать больше о них, можно ли их активировать в intellisense?

Обновление / уточнение : Теперь я обнаружил, что кажется, что это зависит от того, какой контроль. Следующий код компилируется:

        Control c = sender as Control;
        Form f = sender as Form;
        PictureBox p = sender as PictureBox;
        Console.Write(c.DisplayRectangle); // No Intellisense
        Console.Write(f.DisplayRectangle); // Intellisense
        Console.Write(p.DisplayRectangle); // No Intellisense

Мой вопрос был о DisplayRectangle для PictureBox или элементах управления в целом.

Ответы [ 3 ]

8 голосов
/ 14 сентября 2010

Это объявление свойства:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Browsable(false)]
[SRDescription("ControlDisplayRectangleDescr")]
public virtual Rectangle DisplayRectangle
{
    get
    {
        return new Rectangle(0x0, 0x0, this.clientWidth, this.clientHeight);
    }
}

Начиная с [Browsable], этот атрибут гарантирует, что свойство не будет отображаться в окне свойств.Что имеет смысл, потому что это свойство времени выполнения и нет установщика.Это также относится к [DesignerSerializationVisibility], это гарантирует, что значение свойства не будет записано в метод InitializeComponent ().[SRDescription] предназначен для локализации.

[EditorBrowsable] имеет отношение к вашему вопросу.Использование EditorBrowsableState.Advanced гарантирует, что IntelliSense будет отображать свойство только в том случае, если редактор работает в режиме «Показать расширенную информацию IntelliSense».Единственная известная мне среда IDE, которая использует эту функцию, - это VB.NET, ее всплывающее окно IntelliSense имеет вкладку «Все», но по умолчанию - «Общее».Но не C # IDE, язык, на котором вы отметили свой вопрос.

Я должен догадаться, что вы на самом деле программируете на VB.NET, а не на C #.Откройте вкладку «Все» во всплывающем окне.

0 голосов
/ 21 апреля 2013

Чтобы развернуть ответ Ханса Пассанта, эти свойства EditorBrowsableState.Advanced не будут отображаться при автозаполнении из IntelliSense , если не отключен параметр «Скрыть расширенных членов» :

Согласно http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx, «В Visual C # вы можете управлять отображением расширенных свойств в IntelliSense и окне свойств с помощью параметра« Скрыть расширенных членов »в меню« Сервис | Параметры | Редактор текста | C # ».

Обратите внимание, что после того, как я заполнил полное (и правильно написанное) имя свойства, всплывающая подсказка всегда появляется для меня, независимо от того, как я установил флажок «Параметры» ... Может быть, это потому, что я использовал VS с расширенной настройкой и теперь его кэшированная база данных содержит подробности, но я считаю, что это еще не все: я заметил, что с помощью метода Test, объявленного как «[EditorBrowsable (EditorBrowsableState.Advanced)]] public void Test (object o)» со строковым параметром вызывает сигнатуру "Test (object)", поэтому он получает больше деталей, чем показывает ...

0 голосов
/ 14 сентября 2010

Вместо этого вы можете немного изменить строку: (c as Control).DisplayRectangle.В этом стиле сразу после закрывающей скобки intellisense должен показывать свойство.Это решит вашу проблему?

...