C# 如何在Windows自定义控件中设置动态属性
我创建了一个用户控件,它有两个属性C# 如何在Windows自定义控件中设置动态属性,c#,dynamic,custom-controls,C#,Dynamic,Custom Controls,我创建了一个用户控件,它有两个属性 类型 参数 其中,类型是枚举 public enum Type { XType , YType } 而参数的类型为字符串 现在,我需要将参数更改为enum。我确信每个类型都有两个参数 它们是XTypeFoo、XTypeBar、YTypeFoo、YTypeBar 在此之前,我将参数保留为字符串属性。现在我已经为此创建了两个枚举 public enum XParameter { XTypeFoo, XTypeBar } and public enum YPara
类型
是枚举
public enum Type { XType , YType }
而参数
的类型为字符串
现在,我需要将参数
更改为enum。我确信每个类型都有两个参数
它们是XTypeFoo、XTypeBar、YTypeFoo、YTypeBar
在此之前,我将参数
保留为字符串
属性。现在我已经为此创建了两个枚举
public enum XParameter { XTypeFoo, XTypeBar } and
public enum YParameter { YTypeFoo, YTypeBar }
现在我需要将参数
属性的类型从字符串
更改为其他类型(取决于类型
)
i、 e如果用户选择Type
作为XType
,则参数应为XParameter
,如果YType
则XParameter
那么什么是基本类型。不可能,我认为不需要它。你应该重新设计你的课程
让一个枚举只有{Foo,Bar}
作为参数怎么样?您不能从枚举中插入,所以您需要使用类。为每个枚举值使用类常量或“Dummyclass”:
在这两种情况下,您都使用基类:
public class BaseParameter { }
“Dummyclass”:
常数:
public class XParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new XParameter();
public readonly BaseParameter TypeBar = new XParameter();
}
public class YParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new YParameter();
public readonly BaseParameter TypeBar = new YParameter();
}
在这两种情况下,您都可以用来检查XParameter
或yparameter
以及值为XTypeFoo
或值==XParameter.TypeFoo
的确切值,如果Type
将是枚举,而参数
也将是枚举(虽然允许的值将取决于类型
),但本质上,所有可能的值都是事先已知的。因此,为什么不为参数
创建一个单一的组合枚举,并放弃类型
属性?例如
public enum ParameterType
{
XTypeFoo,
XTypeBar,
YTypeFoo,
YTypeBar,
}
public interface IParameter
{
public ParamType GetParamType();
}
public sealed class FooParameter : IParameter
{
public static readonly FooParameter XParameter = new FooParameter();
public static readonly FooParameter YParameter = new FooParameter();
public ParamType GetParamType() { return ParamType.Foo; }
private FooParameter() { }
}
public sealed class BarParameter : IParameter
{
public static readonly BarParameter XParameter = new BarParameter();
public static readonly BarParameter YParameter = new BarParameter();
public ParamType GetParamType() { return ParamType.Bar; }
private BarParameter() { }
}
public class MyControl : UserControl
{
IParameter Parameter {get; set; }
...
}
或者,您可以开始询问有关类型信息的参数
public enum ParameterType
{
XTypeFoo,
XTypeBar,
YTypeFoo,
YTypeBar,
}
public interface IParameter
{
public ParamType GetParamType();
}
public sealed class FooParameter : IParameter
{
public static readonly FooParameter XParameter = new FooParameter();
public static readonly FooParameter YParameter = new FooParameter();
public ParamType GetParamType() { return ParamType.Foo; }
private FooParameter() { }
}
public sealed class BarParameter : IParameter
{
public static readonly BarParameter XParameter = new BarParameter();
public static readonly BarParameter YParameter = new BarParameter();
public ParamType GetParamType() { return ParamType.Bar; }
private BarParameter() { }
}
public class MyControl : UserControl
{
IParameter Parameter {get; set; }
...
}
请不要在标题前加上“C:”之类的前缀。这就是标签的作用。