2010-04-02 12 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; } 
} 

Ok, j'ai comme ça. L'instance de MainClass est sélectionnée par PropertyGrid.PropertyGrid + interface

Comment faire un DropDownList d'objets de classes qui mettent en œuvre ITest (ici et Test2 Test1)

Répondre

1

Voilà comment cela fonctionne. La propriété de test getter renvoie un objet d'une classe concrète qui implémente ITest. Tout ce qui lui était assigné en dernier, soit null, un objet de Test1 ou un objet de Test2. PropertyGrid utilise Reflection pour regarder le type d'objet et ses membres. Il affichera Test1Property ou Test2Property. Tu ne peux pas choisir.

Vous ne savez pas ce que vous essayez de faire, vous voulez probablement un UITypeEditor si vous souhaitez affecter un objet d'un type différent.

+0

Je vais vérifier comment fonctionne UITypeEditor – nilphilus

0

Ok, j'ai utilisé UITypeEditor (thx nobugz), et créer une liste déroulante pour les valeurs possibles. Les valeurs que je reçois de Type[] BehaviorManager.GetBehaviorsWhichImplement(Type type) - qui renvoient un tableau de types implémentant une interface donnée.

Lorsque l'utilisateur a sélectionné une nouvelle valeur, j'obtiens une nouvelle instance de l'objet BehaviorManager.GetBehavior(Type) sélectionné qui utilise un Activator.CreateInstance. Et attribuez-le à la propriété.

Bien sûr, ce n'est pas un dropdownlist, mais il est très bon aussi :-)

est ici un article que je suit - http://philwinkel.com/blog/?p=4

Je sais, mon Grammer est tragique, désolé, je J'essaie toujours de faire ça avec ;-)