1

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

但由于我在名为“DummyProperty”的属性上方有一个设置 [DefaultValue("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);
    }
}
4

1 回答 1

0

有点令人困惑的是,DefaultValue 自定义属性不用于为您想要的属性设置默认值。事实上,它根本不被运行时直接使用。它旨在供 Visual Studio 设计器使用。

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

更多信息: .Net DefaultValueAttribute on Properties

于 2013-07-18T20:15:22.357 回答