C#DefaultValue属性不起作用

时间:2016-01-19 05:44:45

标签: c# attributes control-library

我正在使用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 个答案:

答案 0 :(得分:2)

默认值属性仅指示设计者什么是属性的默认值。它不会将其设置为属性后面的成员的实际值。这也在MSDN page for the default value attribute上提到:
(在备注部分)

  

注意
  DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。

所以,正如其他人已经提到过的,你需要自己在代码中设置这些值(我喜欢在构造函数中而不是在私有成员的声明中这样做,但我认为这只是个人偏好的问题)。

答案 1 :(得分:1)

public partial class MyControl : UserControl
{
    //Declare your variables here
    private float mMinValue = 0.0;
    private float mMaxValue = 1.0;

    //Leave it
    public MyControl()
    {
        InitializeComponent();
    }
}

答案 2 :(得分:1)

如果我理解你,你试着使用DefaultValueAttribute,引用:

  

DefaultValueAttribute不会自动导致成员   使用属性的值初始化。您必须设置初始值   在你的代码中。

要设置默认值,您应该使用构造函数。

public MyControl()
{
    MinValue = 0;
    MaxValue = 100;
    InitializeComponent();
}