Как установить значение цвета по умолчанию в пользовательском элементе управления в Winforms? - PullRequest
15 голосов
/ 06 октября 2009

Я получил значение для корректного отображения, используя:

    [DefaultValue ( typeof ( Color ), "255, 0, 0" )]
    public Color LineColor
    {
        get { return lineColor; }
        set { lineColor = value; Invalidate ( ); }
    }

Но после того, как я перезагружаю проект, используется элемент управления, это значение устанавливается на Белое, и я могу вызвать Сброс, чтобы снова вернуться к Красному, но я не понимаю проблему.

Как вы должны установить значение по умолчанию и убедиться, что оно сохранено, если я не изменю значение вручную по умолчанию?

На самом деле я также делаю это, что устанавливает значения Back и ForeColor в эти значения, а редактор свойств VS показывает их, как если бы они изменились со значения по умолчанию.

Это неправильно?

    public CoolGroupBox ( )
    {
        InitializeComponent ( );
        base.BackColor = Color.FromArgb ( 5, 5, 5 );
        base.ForeColor = Color.FromArgb ( 0, 0, 0 );
    }

Ответы [ 7 ]

19 голосов
/ 06 октября 2009

Хитрость заключается в использовании шестнадцатеричного кода цвета:

    [DefaultValue(typeof(Color), "0xFF0000")]
    public Color LineColor
    {
            get { return lineColor; }
            set { lineColor = value; Invalidate ( ); }
    }

Я думаю, вы также можете использовать "255, 0, 0", но я не уверен и обычно использовал либо названные цвета, либо шестнадцатеричный код.

8 голосов
/ 06 октября 2009

А как насчет того, чтобы установить для переменной-члена нужный вам цвет по умолчанию?

private Color lineColor = Color.Red;

public Color LineColor
{
        get { return lineColor; }
        set { lineColor = value; Invalidate ( ); }
}

Если хотите, чтобы сохранилось , просто выньте установленный аксессор.

Редактировать

Понятно, вы хотите, чтобы список свойств в конструкторе отображал цвет по умолчанию.

Необходимо переопределить свойство BackColor базового элемента управления, добавить новый атрибут DefaultValueAttribute для своего свойства new , а затем фактически установить цвет по умолчанию в конструкторе или в методе InitializeComponent () (в файл designer.cs), что, вероятно, лучше, так как это для дизайнера.

public partial class RedBackgroundControl : UserControl
{
    public RedBackgroundControl()
    {
        InitializeComponent();
        base.BackColor = Color.Red;
    }

    [DefaultValue(typeof(Color), "Red")]
    new public Color BackColor
    {
        get
        {
            return base.BackColor;
        }
        set
        {
            base.BackColor = value;
        }
    }
}
4 голосов
/ 06 октября 2009

Атрибут [DefaultValue(...)] является подсказкой для дизайнеров и генераторов кода. Это НЕ инструкция для компилятора.

Подробнее в этой статье базы знаний .

0 голосов
/ 08 августа 2018

Вы можете установить конкретный атрибут в component.designer.cs в методе Initializecomponent:

  private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
        this.LineColor= System.Drawing.Color.FromArgb(255, 0, 0);
    }

Перестройте проект, и все также должно отображаться в

0 голосов
/ 03 декабря 2013

Мне не повезло с использованием атрибута DefaultValue со свойствами типа Color или типа Font, но я преуспел с этими методами, описанными в документации msdn:

«Определение значений по умолчанию с использованием методов ShouldSerialize и Reset» http://msdn.microsoft.com/en-us/library/53b8022e(v=vs.90).aspx

Я использовал Color.Empty и null, соответственно, в качестве значений для моих личных полей поддержки, и публичные свойства всегда возвращали что-то полезное.

0 голосов
/ 17 июня 2013

В DependencyProperty используйте UIPropertyMetadata

как:

public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
        "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red));
0 голосов
/ 22 ноября 2012

Существует довольно статья об инициализации свойства по умолчанию для значения CodeProject

...