属性网格对象无法通过组合框选择,但是在组合框滚动或者双击时确定

时间:2020-03-06 14:31:40  来源:igfitidea点击:

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

我想在其中一个属性(DataType,返回一个可能值的枚举)上使用TypeConverter,因为我想使用以下2种方法将可用于属性网格的值限制为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之间切换。类似地,我可以使用鼠标滚轮滚动浏览属性文件组合框中的选项。

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

Object of type 'System.String' cannot
  be converted to type
  'Pelion.PM3.Utils.Constants+DataTypes'.

我假设我可以使用Type转换器中的Converter替代来捕获它们并将它们转换为Enum of DataType,但是当我从下拉列表中选择而不是双击或者单击" mouseewheeling"时,为什么属性网格会失败?落下?

解决方案

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