用空格在ComboBox中显示枚举
我有一个枚举,例如:
enum MyEnum
{
My_Value_1,
My_Value_2
}
随着:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
但现在我的问题是:如何用“”替换“_”,以便它变成空格而不是下划线的项目? 而且一个数据绑定对象仍然有效
如果你有权访问Framework 3.5,你可以这样做:
Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.Select(e=> new
{
Value = e,
Text = e.ToString().Replace("_", " ")
});
这将返回一个匿名类型的IEnumerable,该类型包含一个Value属性(枚举类型本身)和一个Text属性,该属性将包含以空格替换下划线的枚举数的字符串表示形式。
Value属性的目的在于,您可以确切地知道组合中选择了哪个枚举器,而无需返回下划线并解析字符串。
如果您可以修改定义枚举的代码,那么您可以在不修改实际枚举值的情况下向这些值添加属性,那么您可以使用此扩展方法。
/// <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();
}
手动填充组合框并在枚举上进行字符串替换。
这正是你需要做的事情:
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("_", " "));
}
要设置组合框的选定项目,请执行以下操作:
comboBox1.SelectedItem = MyEnum.My_Value_2.ToString().Replace("_", " ");
链接地址: http://www.djcxy.com/p/91503.html