首页 文章

使用ComumBox的枚举描述

提问于
浏览
1

我一直在编程的系统中使用各种枚举和组合框 . 我有一些枚举这样的描述:

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 回答

  • 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>();
    

相关问题