property在Stringconverter继承的类中使用hashtable的Grid

时间:2014-01-07 06:35:17

标签: c# .net-2.0 propertygrid

我在从StringConvertor类继承的videoformates类中有哈希表。两个函数ConvertFromConvertTo覆盖了那里。如何使用这两个函数来将视频格式显示为字符串。

public class VideoFormate : StringConverter
{
    private Hashtable VideoFormates;
    public VideoFormate() {
            VideoFormates = new Hashtable();
            VideoFormates[".3g2"] = "3GPP2";
            VideoFormates[".3gp"] = "3GPP";
    }
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        return new StandardValuesCollection(VideoFormates);
    }
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        return base.ConvertTo(context, culture, value, destinationType);
    }
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return base.ConvertFrom(context, culture, value);
    }
视频属性的

类是

class videoProperties
{
    private string _VideoFormat;

    [TypeConverter(typeof(VideoFormate)), 
    CategoryAttribute("Video Setting"),
    DefaultValueAttribute(0), 
    DescriptionAttribute("Select a Formate from the list")]
    public string VideoFormat
    {
        get { return _VideoFormat; }
        set { _VideoFormat = value; }
    }

}

我希望将3GPP2显示为显示成员,将.3gp2显示为propertyGrid中组合框中的值成员。

1 个答案:

答案 0 :(得分:0)

调试代码后,我找到了答案。

首次运行时,在上面的代码中,propertyGrid下拉列表填充Hashtable集合。 ConvertTo方法将其转换为字符串。所以保存为System.Collections.DictionaryEntry。 从组合框中选择一个元素时,它将videoProperties.VideoFormat设置为System.Collections.DictionaryEntry。所以我改变了ConvertTo函数,如下所示。

public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (value is DictionaryEntry)
        {
            return ((DictionaryEntry)value).Key;
        }
        else if (value != null)
        {
            return VideoFormates[value];
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }

函数检查值类型是否为DictionaryEntry然后它转换它并返回key参数的value元素。因此,组合框填写key值。当表单再次显示ConvertTo函数时,第二次返回组合框值。然后simplay在组合框值的基础上返回Hashtable值。