私はよく理解していれば、あなたは文字列の値を定義するために、動的に作成された文字列のリストを使用するに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);
}
}
見ての通り、コンバータはから値を取得するには、プロパティグリッドコンテキストへのアクセスを持っていますどこかに。
私は間違っているかもしれませんが、これはこの場合に表示されるものです。私はあなたが 'enum'をあなたのソースにあらかじめ定義しておかなければならないと思います。文字列のセットを読み込んで、それらから 'enum'を動的に作成できるとは思いません。 //それが事前定義されている場合は、単に 'Enum.TryParse'を使うことができます。 – KDecker
なぜenum.tryparseを使用しないのですか?ああ、動的に列挙型を作成したいですか? https://msdn.microsoft.com/en-us/library/system.reflection.emit.enumbuilder(v=vs.110).aspx –
列挙型を作成する必要はなく、 'GetStandardValuesSupported'、' GetStandardValuesExclusive'および'GetStandardValues'では、値をドロップダウンに表示します。列挙型はこれをXYの質問にします – Plutonix