早上看到jhh0111昨天lobalization的问题,虽然jhh0111的方案可以工作,但是扩展性不强——当枚举数量很大时可用性很低;另外,如果绑定到其他控件(比如Grid控件)也会有一些问题。
这里给出一个通用的解决方案,虽然复杂了一些,但是可用性和扩张性均有大大提高。
显然这里自己去实现自定义格式化,即通过IFormatable、IFormatProvider、ICustomFormatter等接口已达到Globalization有点小题大作了,而另外一个很容易想到的点是通过DiaplayMember实现显示值得自定义(对于简单Binding,例如ComboBox、ListBox等只用重载ToString就可以了)。
既然有了方向,那就动手了。
首先,我们希望Binding整个枚举类型的每一个值,也就是说,我们需要把这个枚举的所有值变成一个数据源,为了实现这一点,我们可以使用Enum上的helper方法Enum.GetValues(Type)来返回一个对所有值得枚举,然后依次添加到IList对象或者IListSource接口即可。
 1枚举的多语言显示if (!typeof(EnumType).IsEnum)
 2}
然后,取到了值,由于我们希望自定义Binding显示,那么需要对枚举值进行封装,而在这个封装里面,我们可以实现多语言的支持。
 1}
至此,整个功能的框架已经完成,下面我们来看看一些细节——如何对资源读取和管理的封装:
  1}
OK,大功告成,有了这么一个封装,在应用里就可以简单的这么几句够搞定。
 1枚举的多语言显示private void Form1_Load(object sender, EventArgs e)
 2}
你可以从这里下载本篇中的相关示例代码:
https://files.cnblogs.com/winkingzhang/Demo_2008_03_25.rar

相关文章:

  • 2021-12-08
  • 2021-07-18
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2021-07-27
猜你喜欢
  • 2022-01-24
  • 2022-12-23
  • 2021-06-12
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
相关资源
相似解决方案