C# 如何在值集合的TypeConverter中显示空字符串?WinForms设计器
从这个问题 答复 @雷扎·阿盖伊很好 但是关于makevalue=null。是的,它是通过以下方式完成的。但是WinForms设计器不显示(Null)文本字符串 下面是实现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
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;否则返回您的值。