根据以下发布的示例代码,我可以在下拉列表中看到值为风险和违约。
但是由于我在名为“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);
}
}
答案 0 :(得分:0)
有些令人困惑的是,DefaultValue自定义属性不用于在您想要的属性上设置默认值。实际上,它根本不是由运行时直接使用的。它的目的是供Visual Studio设计人员使用。
您可能只想在其他位置初始化值(例如在UserControl1构造函数中)。