2009-02-27 27 views
4

Bir propertygrid içinde bir "string" değeri gösteren ancak bir "int" değeri döndüren bir dropdownlist gösterebilmek istiyorum..Net PropertyGrid DropDownList - dönüş değeri farklı bir değer döndürme

Örneğin, ben bu sınıf var ayarlamanıza olanak tanır: Burada

public class MyObjectOptions : StringConverter 
{ 
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     MyObjectCollection mm = new MyObjectCollection(); 

     List<String> names = new List<String> 
     foreach (MyObject m in mm) 
     { 
      m.Id // Need to store this somewhere ... 
      names.Add(m.Name); 
     } 

     return new StandardValuesCollection(name); 
    } 

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
    { 
     return true; 
    } 
} 

Gördüğünüz gibi propertygrid kontrolü

public class MyObjectProperty 
{ 
    [TypeConverter(typeof(MyObjectOptions))] 
    public int Id 
    { 
     get { return this.id; } 
     set { this.id = value; } 
    } 
} 

benim sınıf kullanımıdır, ben id saklamak istediğiniz nesne, ama ben açılır listeden adını göstermek istiyorum ... Ben bir hashtable kullanmayı deneyin ama işe yaramıyor ...

BTW - .Net 3.5 sürümünü kullanıyorum ama sadece WinForm kullanıyorum WPF).

cevap

2

Bunun için GetStandardValues ​​kullanamazsınız. Tamsayı değerlerinizi 1, 5 ve 10 diyelim ile sınırlamak zorunda kalmanız durumunda bu yöntem yararlı olacaktır. Özellik değerinizde dizeleri göstermek istiyorsanız, yalnızca TypeConverter'ınızın ConvertTo ve ConvertFrom yöntemlerini geçersiz kılmanız gerekir. . PropertyGrid açılan listedeki dönüştürülen dizeleri kullanır.

Verilerinizin statik olması durumunda, hashtable'ınız hakkında, bunu TypeConverter içine kaydedebilirsiniz. Dinamikse en iyisi, ızgara hedef örneğinin onu yönetmesine izin vermektir. Dönüştürücünüzden, TypeDescriptorContext.Instance özelliği aracılığıyla erişebilirsiniz.

Bu yardımcı olur umarım.