C# DefaultValue атрибут не работает
Я использую программу библиотеки элементов управления C# windows для создания собственного элемента управления, код которого выглядит следующим образом:
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
}
private float mMinValue;
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Category("Design") , DefaultValue(0.0)]
public float MinValue
{
get { return mMinValue; }
set { mMinValue = value; }
}
private float mMaxValue;
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Category("Design") , DefaultValue(1.0)]
public float MaxValue
{
get { return mMaxValue; }
set { mMaxValue = value; }
}
}
При запуске программы значения MinValue и MaxValue по умолчанию равны 0, так как правильно установить значение по умолчанию?
3 ответа
Атрибут Значение по умолчанию только указывает конструктору, что является значением свойства по умолчанию. Он не устанавливает его как фактическое значение члена за свойством. Это также упоминается на странице MSDN для атрибута значения по умолчанию:
(в разделе замечаний)
Заметка
Атрибут DefaultValueAttribute не будет автоматически инициализировать элемент значением атрибута. Вы должны установить начальное значение в вашем коде.
Итак, как уже упоминали другие, вам нужно установить эти значения в коде самостоятельно (мне нравится делать это в конструкторе, а не в объявлении закрытых членов, но я думаю, что это просто вопрос личных предпочтений).
public partial class MyControl : UserControl
{
//Declare your variables here
private float mMinValue = 0.0;
private float mMaxValue = 1.0;
//Leave it
public MyControl()
{
InitializeComponent();
}
}
Если я вас правильно понял, вы пытаетесь использовать DefaultValueAttribute, цитата:
Атрибут DefaultValueAttribute не приведет к автоматической инициализации элемента со значением атрибута. Вы должны установить начальное значение в своем коде.
Чтобы установить значение по умолчанию, вы должны использовать конструктор.
public MyControl()
{
MinValue = 0;
MaxValue = 100;
InitializeComponent();
}