如何在组合框中显示枚举值?

Bil*_*soe 13 c# enums combobox winforms

如何在组合框中显示枚举值?下面的代码导致组合框的所有显示名称都是"caseHandler.cState".我希望它具有枚举值的实际名称.

我的枚举定义如下:

public enum caseState
{
    Active = 1,
    Finished,
    Problem
}
Run Code Online (Sandbox Code Playgroud)

我有一个定义为这样的类:

public class cState
{    
    public string _name;
    public int _id;

    public cState(int id,string name)
    {
        _name = name;
        _id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

填充我的组合框的代码:

ArrayList AL = new ArrayList();

foreach (string cs in Enum.GetNames(typeof(caseState)))
{
    cState aEnum = new cState((int)Enum.Parse(typeof(caseState),cs),cs);
    AL.Add(aEnum);
}


cbState.DisplayMember = "_name";
cbState.ValueMember = "_id";

cbState.DataSource = AL;
Run Code Online (Sandbox Code Playgroud)

Ste*_*cya 23

你试过用吗?

cbState.DataSource = Enum.GetNames(typeof(caseState));
Run Code Online (Sandbox Code Playgroud)

并且在检索数据时只需解析它

  • @Stecya - 好吧,我发现了错误.我应该将_name和_id实现为属性,然后它就可以了. (4认同)

小智 10

恩欧姆

public enum Status { Active = 0, Canceled = 3 }; 
Run Code Online (Sandbox Code Playgroud)

设置下拉值

cbStatus.DataSource = Enum.GetValues(typeof(Status));
Run Code Online (Sandbox Code Playgroud)

从所选项目中获取枚举

Status status; 
Enum.TryParse<Status>(cbStatus.SelectedValue.ToString(), out status); 
Run Code Online (Sandbox Code Playgroud)

http://amir-shenodua.blogspot.com/2012/03/net-using-enum-to-populate-combo-box.html

  • 在发布复制和粘贴多个问题的样板/惯用答案时要小心,这些问题通常会被社区标记为“垃圾邮件”。如果您正在这样做,则通常意味着问题是重复的,因此应将其标记为:http://stackoverflow.com/questions/906899 (2认同)