属性网格对象在组合框选择时失败,但在组合框滚动或双击时确定

时间:2008-09-22 07:36:54

标签: c# winforms propertygrid

我在C#中有一个属性网格,加载一个'PropertyAdapter'对象(我的一个对象的基本包装器,用相应的标签显示相关属性)

我在其中一个属性(DataType,它返回可能值的枚举)上有一个TypeConverter,因为我想将属性网格的可用值限制为Decimal和Integer,使用以下两种方法

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

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
    return new StandardValuesCollection(new List<Constants.DataTypes>() { Constants.DataTypes.Decimal, Constants.DataTypes.Integer });
}

这正如我想要的那样在属性网格上显示,当我双击属性网格中的属性字段时,它很高兴地在Integer和Decimal之间切换。类似地,我可以使用鼠标滚轮滚动属性字段组合框中的选项。

但是,如果我使用属性字段作为组合框并从下拉列表中选择一个值,我会得到标准属性网格错误框,其中包含错误:

  

'System.String'类型的对象不能   转换为类型   'Pelion.PM3.Utils.Constants +数据类型'。

我假设我可以使用Type转换器中的Converter覆盖来捕获这些并将它们转换为Enum of DataTypes,但是当我从下拉列表中选择而不是双击或'mouseewheeling时,为什么属性网格会失败'在下拉?

1 个答案:

答案 0 :(得分:3)

从组合框下拉列表中选择时,该值将以字符串形式返回。我不确定为什么会这样,但我以前见过。我认为基本上双击或滚动鼠标滚轮会更改值集合中的值,而从下拉列表中选择就像将字段值编辑为字符串一样。然后,您将字符串中的值转换为枚举值。