首页 > 解决方案 > 如何在值集合的 TypeConverter 中显示空字符串?WinForms 设计器

问题描述

从this question WinForms Designer properties of different derived types 由@Reza Aghaei 回答非常好。

但是关于make value = null。是的,它通过以下方式完成。但 WinForms 设计器不显示 (Null) 文字字符串。

这是实现

public class ValueElementConverter : ExpandableObjectConverter
{
    ValueElement[] standardValues = new ValueElement[] { null, new StaticValue(), new DynamicValue() };
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        if (sourceType == typeof(string)) return true;
        return base.CanConvertFrom(context, sourceType);
    }
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value == null) return null;
        if (value.ToString().Trim().Length == 0)
            return null;
        else
        {
            var result = standardValues.FirstOrDefault(x => !string.IsNullOrWhiteSpace(x?.ToString()) && x.ToString() == value?.ToString());
            if (result != null)
                return result;
            return base.ConvertFrom(context, culture, value);
        }
    }
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }
    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }        

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        List<ValueElement> xx = new List<ValueElement>();
        return new StandardValuesCollection(standardValues);
    }

}

[TypeConverter(typeof(ValueElementConverter))]
public abstract class ValueElement
{
}

public class StaticValue : ValueElement
{
    public string value { get; set; }

    public override string ToString()
    {
        return "Static";
    }
}

public class DynamicValue : ValueElement
{
    public string dynamicValue;

    public override string ToString()
    {
        return "Dynamic";
    }
}

这是结果。standardValues很棒,除了集合中的第一个值为 null 的值。但在 Visual Studio WinForms 设计器中不显示 Null 字符串文字。

看图片

标签: c#.netwinformspropertiesuser-controls

解决方案


推荐阅读