2012-03-14 91 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; } 

    ... 
}