2010-04-02 51 views
0
public interface ITest { 
    void Somethink(); 
} 

public class Test1 : ITest { 
    public void Somethink() { /* do stuff */ } 
    public int Test1Property { get; set; } 
} 

public class Test2 : ITest { 
    public void Somethink() { /* do stuff */ } 
    public float Test2Property { get; set; } 
} 

//Main class 
public class MainClass 
{ 
    [TypeConverter(ExpandableObjectConverter)] 
    public ITest test { get; set; } 
} 

好吧,我有這樣的東西。 MainGlass的實例由PropertyGrid選擇。PropertyGrid +接口

如何使它們實現ITEST(這裏的Test1和Test2的)對象類的一個DropDownList

回答

1

這不是它的工作原理。測試屬性getter將返回實現ITest的具體類的對象。不管最後分配給它的是null,Test1的對象還是Test2的對象。 PropertyGrid使用Reflection來查看對象類型及其成員。它將顯示Test1Property或Test2Property。你不能選擇。

不確定你想要做什麼,如果你想分配一個不同類型的對象,你可能需要一個UITypeEditor。

+0

我會檢查UITypeEditor是如何工作的 – nilphilus 2010-04-02 21:52:05

0

好的,我使用了UITypeEditor(thx nobugz),併爲可能的值創建組合框。我從Type[] BehaviorManager.GetBehaviorsWhichImplement(Type type)得到的值 - 返回一個實現給定接口的類型數組。

當用戶選擇一個新的值,我得到一個新的實例選擇對象BehaviorManager.GetBehavior(Type)它使用Activator.CreateInstance。並將其分配給Property。

當然,它不是一個下拉列表,但它是相當不錯:-)

這裏是我遵循的文章 - http://philwinkel.com/blog/?p=4

我知道,我的語法是悲慘的,對不起,我我仍然試圖做這件事;-)