2012-03-14 94 views
0

我已经创建了一个用户控件,并且其具有两个属性如何在Windows的自定义设置动态属性控制

  1. 类型
  2. 参数

其中Type是枚举,

public enum Type { XType , YType } 

Parameter是的类型3210

现在,我需要将Parameter更改为枚举。我确信每个Type都有两个参数。

它们是XTypeFoo, XTypeBar, YTypeFoo, YTypeBar

此前,我保留Parameter作为String属性。我现在已经创建了两个枚举为此,

public enum XParameter { XTypeFoo, XTypeBar } and 
public enum YParameter { YTypeFoo, YTypeBar } 

现在我需要从string改变Parameter属性的类型到别的东西(取决于Type

也就是说,如果用户选择TypeXType然后Parameter应该是XParameter并且如果YType然后XParameter

那么什么是基本类型。

+0

请不要用“C#”前缀的称号。这就是标签的用途。 – 2012-03-14 10:59:11

回答

0

不可能,我不认为这是必要的。你应该重新设计你的课程。

如何使用参数为{ Foo, Bar }的枚举?

0

你不能从enums以下所以你需要使用类。无论是使用类常量或 “Dummyclass” 每个枚举值:

在你使用基类两种情况:

public class BaseParameter { } 

“Dummyclass”:

public class XParameter : BaseParameter { } 
public class YParameter : BaseParameter { } 
public class XTypeFoo : XParameter { } 
public class XTypebar : XParameter { } 
public class YTypeFoo : YParameter { } 
public class YTypebar : YParameter { } 

常量:

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(); 
} 

Inboth情况下,你可以使用IsAssignable检查XParameterYParamter,确切地说,您使用的是value is XTypeFoovalue == XParameter.TypeFoo

0

如果Type将是枚举和Parameter也将是一个枚举(尽管允许值将取决于Type)然后基本上,所有可能的值被预先已知的。那么为什么不为Parameter单独列举一个枚举并丢弃Type属性?例如,

public enum ParameterType 
{ 
    XTypeFoo, 
    XTypeBar, 
    YTypeFoo, 
    YTypeBar, 
} 

或者,您可以开始询问有关类型信息的Parameter。和这样的:例如,

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; } 

    ... 
} 
相关问题