c# - 如何在值集合的 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 字符串文字。
解决方案
推荐阅读
- ansible - ansible:在同一主机上多次运行任务,使用来自另一个主机的变量
- google-cloud-platform - 如何使用 Mac EU 键盘在 Cloud Shell 上键入特殊符号?
- cmake - 是否可以为使用 CMake 构建 yaml-cpp 设置“-fexceptions”标志
- excel - 查找两个 dd/mm/yyyy hh:mm 之间的时差
- python - 为列表中的每个元素调用 API
- r - 将df列表中的df随机划分为相等的子集
- amazon-web-services - 基于令牌的 docker 访问
- ejs - 在 ejs 'Scriptlet' 标记内呈现不同的数据值
- ios - AVFoundation - 视频合并但只播放最后一个视频
- javascript - 如何修复 Google OAuth 401 错误无效客户端?