Как каждый сделал, чтобы разработчик C# знал свойство по умолчанию для Дополнения или другого объекта/структуры в C#

Как каждый говорит разработчику значение по умолчанию Свойства, когда это не один из типов, поддерживаемых DefaultValue()? Например, a Padding, или a 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 { ... }

Который, конечно, не скомпилирует.

Как же я сделал бы это?

8
задан Community 8 February 2017 в 14:29
поделиться

2 ответа

Попробуйте следующее:

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, он ничего не записывает во время генерации кода.

РЕДАКТИРОВАТЬ: документация:

9
ответ дан 5 December 2019 в 05:44
поделиться

Попробуйте следующее:

[DefaultValue( typeof( Padding ), "2, 2, 2, 2" )]
public Padding LabelPadding
{
    get { return _labelPadding; }
    set { _labelPadding = value; }
}
20
ответ дан 5 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: