Display enum in ComboBox with spaces
我有一个枚举,例如:
1 2 3 4 5 | enum MyEnum { My_Value_1, My_Value_2 } |
用:
1 |
但现在我的问题是:我如何用""替换"u",使其成为有空格而不是下划线的项?数据绑定对象作品
如果你有一个访问的框架3.5,你可以像这样的东西。
1 2 3 4 5 6 7 |
这将返回一个匿名类型是IEnumerable的一,这是一个包含一个值的枚举类型的房地产,这是房地产本身,和文本字符串表示,这将包含取代的enumerator的强调与空间。
的目的是,房地产的价值,你可以知道这是一项enumerator组合选择中,没有强调到一具有反向解析字符串。
如果你是能够修改的代码枚举的定义,所以你可以添加属性的值不改变当前值的枚举类型,你可以使用这个扩展的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /// <summary> /// Retrieve the description of the enum, e.g. /// [Description("Bright Pink")] /// BrightPink = 2, /// </summary> /// <param name="value"></param> /// <returns>The friendly description of the enum.</returns> public static string GetDescription(this Enum value) { Type type = value.GetType(); MemberInfo[] memInfo = type.GetMember(value.ToString()); if (memInfo != null && memInfo.Length > 0) { object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) { return ((DescriptionAttribute)attrs[0]).Description; } } return value.ToString(); } |
试试这个……
1 2 3 4 5 6 |
...although,I将是更倾向使用"描述"属性(Steve’s每起重机的答案)。
填充的组合框和手动替换的字符串的枚举。
这里是你需要的是:
1 2 3 4 5 6 | comboBox1.Items.Clear(); MyEnum[] e = (MyEnum[])(Enum.GetValues(typeof(MyEnum))); for (int i = 0; i < e.Length; i++) { comboBox1.Items.Add(e[i].ToString().Replace("_","")); } |
对所选项目的设置组合框的下面:
1 | comboBox1.SelectedItem = MyEnum.My_Value_2.ToString().Replace("_",""); |
我喜欢她,虽然我会回答的另一个变量比其他使用"和"恩"这样的答案的过程中所使用的操作系统,可以用较少的用户事件处理程序和事件处理程序中,往往是在
我认为这不是一个很好的概念映射到用户空间的内部名称的枚举。如果你将你的枚举类型的值?所以我suggest你看看这条(localizing .NET enums)。在本文章中描述的技术,可以替代_不仅具有不同的类型的空间,但也使不同语言的方法(利用资源)。
如果你使用的.NET 3.5,你可以添加这样的扩展类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static class EnumExtensions { public static List<string> GetFriendlyNames(this Enum enm) { List<string> result = new List<string>(); result.AddRange(Enum.GetNames(enm.GetType()).Select(s => s.ToFriendlyName())); return result; } public static string GetFriendlyName(this Enum enm) { return Enum.GetName(enm.GetType(), enm).ToFriendlyName(); } private static string ToFriendlyName(this string orig) { return orig.Replace("_",""); } } |
然后,你要设置你的"D"组合框:
1 2 3 | MyEnum val = MyEnum.My_Value_1; comboBox1.DataSource = val.GetFriendlyNames(); comboBox1.SelectedItem = val.GetFriendlyName(); |
这应该与任何类型的工作。你要确保你有一个D是在声明的命名空间中使用包括enumextensions类。