2011-08-11 24 views
2

我有一个propertygrid,使用UITypeEditor来显示一个列表框并选择一个项目。该项目在选择时返回到proertygrid上。但是,如何直接禁用所选项目的编辑,只读选项会阻止它被编辑。Propertygrid UIEditor通过键盘禁用值编辑

比方说,我正在更改属性国家另一种形式,显示列表框中的国家列表。当我选择'阿尔及利亚'并按确定时,'阿尔及利亚'显示在整个国家,但我可以直接编辑阿尔及利亚到任何其他值,击败列表的目的可供选择。

+0

您好,我有同样的问题。请让我知道你是否找到了合适的解决方案。 –

回答

5

如果您只想显示要从中进行选择的值的下拉列表,但可以防止用户在PropertyGrid控件内输入任何内容到属性值,则可以从TypeConverter派生并覆盖GetStandardValuesExclusive方法以简单地返回真正。

要提供下拉列表中显示的一组允许值,您需要覆盖GetStandardValuesSupported方法返回true,然后覆盖GetStandardValues以返回要在下拉列表中显示的允许值列表。

一旦你有了到位,你只需要在属性来指定您的自定义类型转换,像这样:

public class MyTypeConverter : TypeConverter 
{ 
    //Override GetStandardValuesExclusive, 
    //GetStandardValues and GetStandardValuesSupported 
} 

public class SomeClass 
{ 

    [TypeConverter(typeof(MyTypeConverter))] 
    public string SomePropertry 
    { 
     ... 
    } 
} 
+1

我的自定义转换器是继承自StringConverter而不是TypeConverter。看起来像即使你按照上面的步骤,用户将能够输入PropertyGrid,除非你特别继承TypeConverter而不是StringConverter。我切换到使用TypeConverter,它一切正常。 –