与自定义类型转换一起使用时,DefaultValue无法按预期工作

时间:2013-07-18 20:00:57

标签: c# type-conversion default-value

根据以下发布的示例代码,我可以在下拉列表中看到值为风险和违约。

但是由于我在名为“DummyProperty”的属性上面有一个[DefaultValue(“Risk”)]设置,我希望在Property Grid Dropdown中选择Risk值。但它没有发生。我在这里缺少什么?

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    string sDummy;

    [DefaultValue("Risk")]
    [Category("Test")]
    [ParamDesc("SystemType")]
    [TypeConverter(typeof(PropertyGridTypeConverter))]
    public String DummyProperty
    {
        get { return sDummy; }
        set { sDummy = value; }
    }
}

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class ParamDesc : Attribute
{
    public ParamDesc(string PD)
    { PropDesc = PD; }

    public string PropDesc 
    { get; set; }

}


class PropertyGridTypeConverter : TypeConverter
{
    List<string> lst = new List<string>();

    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        if (context != null)
        {
            AttributeCollection ua = context.PropertyDescriptor.Attributes;
            ParamDesc cca = (ParamDesc)ua[typeof(ParamDesc)];

            switch (cca.PropDesc)
            {
                case "SystemType":
                    lst = new List<string> {"Risk", "Default"};
                    break;
                case "DateType":
                    lst = new List<string> {"Daily", "Monthly"};
                    break;
            }
        }
        lst.Sort();
        return new StandardValuesCollection(lst);
    }
}

1 个答案:

答案 0 :(得分:0)

有些令人困惑的是,DefaultValue自定义属性不用于在您想要的属性上设置默认值。实际上,它根本不是由运行时直接使用的。它的目的是供Visual Studio设计人员使用。

您可能只想在其他位置初始化值(例如在UserControl1构造函数中)。

更多信息: .Net DefaultValueAttribute on Properties