当前位置: 首页 > 编程语言 > C#

使用空格在ComboBox中显示枚举分享

时间:2023-04-10 23:44:00 C#

ComboBox中使用空格显示枚举我有一个枚举,例如:enumMyEnum{My_Value_1,My_Value_2}使用:comboBox1.DataSource=Enum.GetValues(typeof(MyEnum));但现在我的问题是:如何将“_”替换为“”,使其成为带有空格而不是下划线的项目?并且数据绑定对象仍然有效如果您可以访问Framework3.5,则可以执行以下操作:Enum.GetValues(typeof(MyEnum)).Cast().Select(e=>new{Value=e,Text=e.ToString()。代替(”_”,””)});这将返回一个匿名类型的IEnumerable,其中包含一个Value属性,也就是枚举类型本身,以及一个Text属性,其中将包含枚举数的string表示形式,下划线被替换为空格。Value属性的目的是让您可以准确地知道在混合中选择了哪个枚举器,而不必返回下划线和分析字符串。如果您能够修改定义枚举的代码,以便您可以在不修改实际枚举值的情况下向值添加属性,那么您可以使用此扩展方法。//////检索枚举的描述,例如///[Description("BrightPink")]///BrightPink=2,/////////枚举的友好描述。publicstaticstringGetDescription(thisEnumvalue){Typetype=value.GetType();MemberInfo[]memInfo=type.GetMember(value.ToString());如果(memInfo!=null&&memInfo.Length>0){object[]attrs=memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);if(attrs!=null&&attrs.Length>0){return((DescriptionAttribute)attrs[0]).Description;}}返回值.ToString();}手动填充combobox并在枚举上进行字符串替换。这正是您需要做的:comboBox1.Items.Clear();MyEnum[]e=(MyEnum[])(Enum.GetValues(typeof(MyEnum)));for(inti=0;itosetthecomboboxToselectanitem,dothis:comboBox1.SelectedItem=MyEnum.My_Value_2.ToString().Replace("_","");试试这个...comboBox1.DataSource=Enum.GetValues(typeof(MyEnum)).Cast().Select(e=>new{Value=e,Description=e.ToString().Replace("_","")}).ToList();comboBox1.DisplayMember="Description";comboBox1.ValueMember="Value";...不过,我更愿意使用“description”属性(根据SteveCrane的回答)。如果您使用的是.NET3.5,则可以添加此扩展类:publicstaticclassEnumExtensions{publicstaticListGetFriendlyNames(thisEnumenm){Listresult=newList();结果.AddRange(Enum.GetNames(enm.GetType()).Select(s=>s.ToFriendlyName()));返回结果;}publicstaticstringGetFriendlyName(thisEnumenm){returnEnum.GetName(enm.GetType(),enm).ToFriendlyName();privatestaticstringToFriendlyName(thisstringorig){returnorig.Replace("_","");然后设置你刚刚做的组合框:MyEnumval=MyEnum.My_Value_1;comboBox1.DataSource=val.GetFriendlyNames();comboBox1.SelectedItem=val.GetFriendlyName();这适用于任何枚举。您必须确保为EnumExtensions类的命名空间包含using语句。我不认为将内部枚举名称映射到用户空间是个好主意。如果重构枚举值会怎样?所以我建议您看一下这篇文章(Localizing.NETEnums)。使用本文介绍的技术,您不仅可以将'_'替换为空格,还可以为不同的语言创建不同的枚举表示(使用资源)。我喜欢凯尔西的回答,尽管我会使用“e”以外的变量,例如'en',因此可以在事件处理程序中毫不费力地使用答案;事件处理程序中的“e”往往是EventArgs参数。对于LINQ和IEnumerable方法,在我看来,使用.NET3.5比较复杂,难以适应非WPF的ComboBoxes以上是C#学习教程:在ComboBox中使用空格显示枚举份额的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: