2013-08-06 81 views
0

我想在PropertyGrid中實現自動完成字符串字段,可以將其設置爲自定義值。WinForms PropertyGrid:動態StandardValuesCollection變化

這裏是我的字符串轉換

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

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

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     return new StandardValuesCollection(Globals.EntityCache.Select(e => e.Name).ToList()); 
    } 
} 

,我把它作爲類型轉換器爲要編輯的字符串屬性。

問題是可能有很多標準值。所以我想通過輸入過濾它們,例如如果我輸入了「Foo」,我只會看到字符串,從下拉菜單中的「Foo」開始。

這有可能以任何方式?也許有可能從上下文或其他方式獲得財產的中間價值?

回答

1

可以使用context參數,並獲得當前的屬性值,像這樣:

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
{ 
    // get the current property value 
    string value = (string)context.PropertyDescriptor.GetValue(context.Instance); 
    return new StandardValuesCollection(GetFilteredList(value)); 
} 
+0

謝謝你,效果很好。實際上,當您按下下拉按鈕時,文本框會失去焦點,因此當前編輯值將保存在實例中。 – shtaff

+0

是的,如果你需要自定義行爲,你必須編寫一個自定義的UITypeEditor,像這樣:http://stackoverflow.com/questions/4305033/property-grid-create-new-instance-on-a-property –