Как установить значение по умолчанию для Цвета в пользовательском элементе управления в Winforms?

Я правильно понял значение, используя:

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

Но после перезагрузки проекта используется элемент управления, для этого значения задано значение "Белый", которое я могу вызвать Reset, чтобы снова вернуться к красному, но я не понимаю проблему.

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

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

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

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

Ответы

Ответ 1

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

Дополнительная информация в эта статья в KB.

Ответ 2

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

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

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

Ответ 3

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

private Color lineColor = Color.Red;

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

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

Изменить

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

Вы должны переопределить свойство BackColor базового элемента управления, добавить новый атрибут DefaultValueAttribute для своего нового свойства, а затем на самом деле установить цвет по умолчанию в конструкторе или в методе 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

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

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

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

Ответ 5

Существует довольно статья о инициализации свойства defaultvalue на CodeProject

Ответ 6

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

как:

public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
        "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red));