1

我在 C# 中有一个属性网格,加载了一个“PropertyAdapter”对象(围绕我的一个对象的基本包装,显示带有适当标签的相关属性)

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

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 });
}

这就像我在属性网格上想要的那样显示,当我双击属性网格中的属性字段时,它会愉快地在整数和小数之间切换。同样,我可以使用鼠标滚轮滚动属性字段组合框中的选项。

但是,如果我将属性字段用作组合框并从下拉列表中选择一个值,则会得到带有错误的标准属性网格错误框:

“System.String”类型的对象无法转换为“Pelion.PM3.Utils.Constants+DataTypes”类型。

我假设我可以使用类型转换器中的转换器覆盖来捕获这些并将它们转换为数据类型的枚举,但是当我从下拉列表中选择而不是双击或“鼠标滚轮”时,为什么属性网格会失败落下?

4

1 回答 1

3

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

于 2008-09-22T10:38:34.140 回答