如何使用枚举值自定义字符串格式的枚举绑定组合框?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

描述了一个方法来使用DescriptionAttribute像这样的自定义属性:

Enum HowNice {
  [Description("Really Nice")]
  ReallyNice,
  [Description("Kinda Nice")]
  SortOfNice,
  [Description("Not Nice At All")]
  NotNice
}

然后,你调用一个函数GetDescription,使用如下语法:

GetDescription<HowNice>(NotNice); // Returns "Not Nice At All"

但是,当我只想用一个枚举的值填充一个ComboBox时GetDescription,这并不能真正帮助我,因为我无法强制ComboBox进行调用

我想要的有以下要求:

  • 读取(HowNice)myComboBox.selectedItem将返回选定的值作为枚举值。
  • 用户应该看到用户友好的显示字符串,而不仅仅是枚举值的名称。因此NotNice,用户不会看到“ ”,而会看到“ Not Nice At All”。
  • 希望解决方案只需要对现有枚举进行最少的代码更改。

显然,我可以为我创建的每个枚举实现一个新类,并覆盖它ToString(),但是对于每个枚举来说这是很多工作,我宁愿避免这样做。

提问于
用户回答回答于

你可以编写一个TypeConverter,它读取指定的属性以在资源中查找它们。因此,你可以毫不费力地获得显示名称的多语言支持。

查看TypeConverter的ConvertFrom / ConvertTo方法,并使用反射读取枚举字段上的属性。

用户回答回答于

ComboBox有你需要的一切:FormattingEnabled你应该设置的属性trueFormat事件,你需要放置所需的格式逻辑。从而,

myComboBox.FormattingEnabled = true;
myComboBox.Format += delegate(object sender, ListControlConvertEventArgs e)
    {
        e.Value = GetDescription<HowNice>((HowNice)e.Value);
    }

扫码关注云+社区