C# 如何在值集合的TypeConverter中显示空字符串?WinForms设计器

C# 如何在值集合的TypeConverter中显示空字符串?WinForms设计器,c#,.net,winforms,properties,user-controls,C#,.net,Winforms,Properties,User Controls,从这个问题 答复 @雷扎·阿盖伊很好 但是关于makevalue=null。是的,它是通过以下方式完成的。但是WinForms设计器不显示(Null)文本字符串 下面是实现 public class ValueElementConverter : ExpandableObjectConverter { ValueElement[] standardValues = new ValueElement[] { null, new StaticValue(), new DynamicValue

从这个问题 答复 @雷扎·阿盖伊很好

但是关于makevalue=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";
    }
}
公共类ValueElementConverter:ExpandableObjectConverter { ValueElement[]standardValues=new ValueElement[]{null,new StaticValue(),new DynamicValue()}; 公共覆盖布尔CanConvertFrom(ITypeScriptorContext上下文,类型sourceType) { if(sourceType==typeof(string))返回true; 返回base.CanConvertFrom(上下文,sourceType); } 公共重写对象ConvertFrom(ITypeDescriptorContext上下文、CultureInfo区域性、对象值) { if(value==null)返回null; if(value.ToString().Trim().Length==0) 返回null; 其他的 { var result=standardValues.FirstOrDefault(x=>!string.IsNullOrWhiteSpace(x?.ToString())和&x.ToString()==value?.ToString()); 如果(结果!=null) 返回结果; 返回base.ConvertFrom(上下文、区域性、值); } } 公共覆盖布尔GetStandardValuesSupported(ITypeDescriptorContext上下文) { 返回true; } public override bool GetStandardValuesExclusive(ITypeDescriptor上下文) { 返回true; } 公共覆盖标准值集合GetStandardValues(ITypeDescriptor上下文) { 列表xx=新列表(); 返回新的标准值集合(标准值); } } [TypeConverter(typeof(ValueElementConverter))] 公共抽象类元素 { } 公共类StaticValue:ValueElement { 公共字符串值{get;set;} 公共重写字符串ToString() { 返回“静态”; } } 公共类动态值:ValueElement { 公共字符串动态值; 公共重写字符串ToString() { 返回“动态”; } } 这是结果。除了
standardValues
集合中的第一个值为空之外,其他值都是空的。但在Visual Studio WinForms designer中不显示空字符串文字


请在我名誉扫地的时候给我点建议,我不能发表评论。这里是旧的答案链接override ConvertTo(),检查值是否为null返回“(none)”,然后在ConvertFrom句柄中检查值是否为=“(none”),然后返回null;否则返回您的值。