对组合框使用枚举说明

时间:2018-12-09 09:32:54

标签: c# enums combobox

我正在编程的系统中使用过各种枚举和组合框。我有一些枚举,像这样的描述:

public enum Week
{
    [Description("Week 01")]
    Week01,
    [Description("Week 02")]
    Week02,
    [Description("Week 03")]
    Week03,
    [Description("Week 04")]
    Week04,
    [Description("Week 05")]
    Week05
}

并且:

public enum Year
{
    [Description("2000")]
    Y2000,
    [Description("2001")]
    Y2001,
    [Description("2002")]
    Y2002,
    [Description("2003")]
    Y2003,
    [Description("2004")]
    Y2004,
    [Description("2005")]
    Y2005
}

对于组合框,我一直在使用以下简单代码:

weekComboBox.DataSource = Enum.GetValues(typeof(Week));
yearComboBox.DataSource = Enum.GetValues(typeof(Year));

这将设置预期的常规枚举值。我想做的是显示[Description()]属性(“ Week 01”或“ 2002”)而不是Week01或Y2002。我已经看到了各种各样的方法来获取此信息,但是我还无法获得将其描述显示在组合框中的信息。

我想做的是设置一个我可以针对每个组合框引用的单一方法?我需要为每个枚举集设置一个方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

public static class EnumList
{
    public static IEnumerable<KeyValuePair<T, string>> Of<T>()
    {
        return Enum.GetValues(typeof(T))
            .Cast<T>()
            .Select(p => new KeyValuePair<T, string>(
                p,                   
                (p.GetType().GetField(p.ToString())
                .GetCustomAttributes(typeof(DescriptionAttribute), false)
                .FirstOrDefault() as DescriptionAttribute)?.Description ?? p.ToString()
                ))
                .ToList();
    }
}

然后:

weekComboBox.DisplayMember = "Value"; 
weekComboBox.ValueMember = "Key"; 
weekComboBox.DataSource = EnumList.Of<Week>();