2016-04-28 7 views
0

Typeconverterを使用してstringのリストを変換して、propertyGridのドロップダウンを作成したいと考えています。私はクラス(MyClassの)は、プロパティMYNAMEが含まれてい例えばユーザーTypeConverterを使用してリスト<string>をpropertyGridのドロップダウンに変換する方法c#

は、リスト名が含まれている、私はリストとPropertyGridの

ではないコレクションの任意のアイデアをドロップダウンとしてリスト名のプロパティショーでのTypeConverter使用したい、私は」おかげ

+1

私は間違っているかもしれませんが、これはこの場合に表示されるものです。私はあなたが 'enum'をあなたのソースにあらかじめ定義しておかなければならないと思います。文字列のセットを読み込んで、それらから 'enum'を動的に作成できるとは思いません。 //それが事前定義されている場合は、単に 'Enum.TryParse'を使うことができます。 – KDecker

+0

なぜenum.tryparseを使用しないのですか?ああ、動的に列挙型を作成したいですか? https://msdn.microsoft.com/en-us/library/system.reflection.emit.enumbuilder(v=vs.110).aspx –

+0

列挙型を作成する必要はなく、 'GetStandardValuesSupported'、' GetStandardValuesExclusive'および'GetStandardValues'では、値をドロップダウンに表示します。列挙型はこれをXYの質問にします – Plutonix

答えて

0

私はよく理解していれば、あなたは文字列の値を定義するために、動的に作成された文字列のリストを使用するに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; 
} 

持つ新しいメートル。ここで

は、私が使用するクラスです。

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

そしてここでは、型変換器である:

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

見ての通り、コンバータはから値を取得するには、プロパティグリッドコンテキストへのアクセスを持っていますどこかに。

enter image description here

関連する問題