2016-04-28 1 views
0

Ich möchte Typconverter verwenden, um Liste der Zeichenfolge zu konvertieren, um ein Dropdown in propertyGrid zu erstellen.Wie Benutzer TypConverter, um Liste <string> in Dropdown in propertyGrid zu konvertieren C#

Zum Beispiel ich habe Klasse (MyClass) enthalten Eigenschaft MyName eine Liste Namen enthalten, möchte ich mit der Liste Namen Eigenschaft zeigen verwenden Typeconverter als Dropdown-Liste und nicht eine Sammlung in Property

Jede Idee, ich m neu mit Typeconverter

public class MyClass 
{ 
    List<string> myNames = {jack, pam , phil, suzan}; 
    public List<string> Names 
    { 
     get {return myNames;} 
    } 
} 

public class TestClass 
{ 
    MyClass myClass = new MyClass(); 

    propertygrid1.SelectedObject = myClass; 
} 

Dank

+1

ich falsch sein könnte, aber. Ich denke, Sie müssen das 'enum' in Ihrer Quelle vordefiniert haben, ich glaube nicht, dass Sie in einer Menge von Strings lesen können und dynamisch eine' enum' daraus erstellen können. // Wenn es vordefiniert ist, können Sie einfach 'Enum.TryParse' verwenden. – KDecker

+0

Warum nicht einfach enum.tryparse verwenden? Oh, du willst das Enum dynamisch erstellen? https://msdn.microsoft.com/en-us/library/system.reflection.emit.enumbuilder(v=vs.110).aspx –

+0

Sie müssen keine enum erstellen, überschreiben 'GetStandardValuesSupported',' GetStandardValuesExclusive' und 'GetStandardValues' zeigt die Werte in einem Dropdown-Menü an. die enum macht dies zu einer XY-Frage – Plutonix

Antwort

0

Wenn ich gut verstehen, wollen Sie eine Liste der Zeichenfolge zu definieren, dynamisch den Wert einer Zeichenfolge erstellt wurde. Hier

ist die Klasse, die ich benutze:

public class MyClass 
{ 
    private List<string> myNames; 

    public MyClass() 
    { 
     myNames = new List<string> { "jack", "pam", "phil", "suzan" }; 
    } 

    [Browsable(false)] 
    public List<string> Names 
    { 
     get { return myNames; } 
    } 

    [TypeConverter(typeof(MyConverter))] 
    public string SelectedName { get; set; } 
} 

Und hier ist der Typ Konverter:

public class MyConverter : TypeConverter 
{ 
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     // you need to get the list of values from somewhere 
     // in this sample, I get it from the MyClass itself 
     var myClass = context.Instance as MyClass; 
     if (myClass != null) 
      return new StandardValuesCollection(myClass.Names); 

     return base.GetStandardValues(context); 
    } 
} 

Wie Sie sehen, ein Konverter hat Zugriff auf das Eigenschaftenraster Kontext um die Werte zu erhalten aus irgendwo. Dies ist, was in diesem Fall angezeigt ist:

enter image description here

Verwandte Themen