我在从StringConvertor类继承的videoformates类中有哈希表。两个函数ConvertFrom
和ConvertTo
覆盖了那里。如何使用这两个函数来将视频格式显示为字符串。
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中组合框中的值成员。
答案 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
值。