Откуда у дизайнера C # знать свойство по умолчанию для Padding или другого объекта / структуры в C # - PullRequest
8 голосов
/ 27 июля 2010

Как сообщить разработчику значение по умолчанию для свойства, если оно не относится к типу, поддерживаемому DefaultValue()?Например, Padding или Font.

Обычно при использовании элемента управления Windows Forms значения по умолчанию отображаются обычным шрифтом в окне «Свойства» и изменяются (не по умолчанию).) значения будут выделены жирным шрифтом.Например,

Image of properties windows with non-default values in bold

В этом примере значением по умолчанию ShowAddress является false, а значением по умолчанию ShowName является true.Этот эффект достигается с помощью следующего:

[DefaultValue(false)]
public bool ShowAddress {
  get { return mShowAddress; }
  set { 
    mShowAddress = value; 
    Invalidate();
  }
}

[DefaultValue(true)]
public bool ShowName { ... }

Однако, когда я попытался что-то сделать для Padding, я с треском провалился:

[DefaultValue(new Padding(2))]
public Padding LabelPadding { ... }

Что, конечно, не скомпилируется.

Как, черт возьми, мне это сделать?

Ответы [ 2 ]

20 голосов
/ 28 июля 2010

Попробуйте это:

[DefaultValue( typeof( Padding ), "2, 2, 2, 2" )]
public Padding LabelPadding
{
    get { return _labelPadding; }
    set { _labelPadding = value; }
}
9 голосов
/ 27 июля 2010

Попробуйте:

private static Padding DefaultLabelPadding = new Padding(2);
private internalLabelPadding = DefaultLabelPadding;
public Padding LabelPadding { get { return internalLabelPadding; } set { internalLabelPadding = value; LayoutNow(); } }

// next comes the magic
bool ShouldSerializeLabelPadding() { return LabelPadding != DefaultLabelPadding; }

Браузер свойств ищет функцию с именем ShouldSerializeXYZ для каждого свойства XYZ.Всякий раз, когда ShouldSerializeXYZ возвращает false, при генерации кода ничего не записывается.

EDIT: документация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...