在WinForms组合框中显示枚举值

4
假设我有以下枚举类型:
public enum MyMode { A = 1, B = 2, C = 3, D = 4 };

我想将这个枚举作为下拉框中的选项之一,我尝试过以下方法:

cmbMyMode.Items.Add(Enum.GetValues(typeof(MyMode )));

但我得到了以下内容。
MyMode[] Array

我需要显示A、B、C、D,是否可以使用自定义字符串代替A、B、C、D?

谢谢。

3个回答

13
List<MyMode> modes = Enum.GetValues(typeof(MyMode)).Cast<MyMode>().ToList();
cmbMyMode.DataSource = modes;

并且可以自定义标签:

var modes = Enum.GetValues(typeof(MyMode)).Cast<MyMode>().Select(mode => 
                   new { Value = mode, Title = string.Format("-->{0}<--", mode) }).
                 ToList();
cmbMyMode.ValueMember = "Value";
cmbMyMode.DisplayMember = "Title";
cmbMyMode.DataSource = modes;

然后

cmbMyMode.SelectedValue

@CarlosLanderas 你为什么这么认为?它被标记为 c# - Andrey Gordeev
我的评论是针对Carlos Landeras的。 - Andrey Gordeev
@vc74 很好,能否在同一行上使用这个(A、B、C、D)与连接的字符串? - user1765862
@user1765862 您的意思是保留值的同时自定义显示吗? - vc 74
string.Format("-->{0}<--", mode) 哈哈,这个goatse实在太可笑了,永远也忘不了。 - Rostol

3
  cmbMyMode.Items.AddRange(Enum.GetNames(typeof(MyMode)));

2
foreach (var name in Enum.GetNames(typeof(MyMode)))
{
    cmbMyMode.Items.Add(name);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接