很多人都回答了如何将枚举绑定到WinForms中的组合框的问题.就像这样:
comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));
Run Code Online (Sandbox Code Playgroud)
但是如果不能设置要显示的实际值,那就没用了.
我试过了:
comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1
Run Code Online (Sandbox Code Playgroud)
有没有人有任何想法如何做到这一点?
我对我的事情进行了枚举,如下:
public enum Things
{
OneThing,
AnotherThing
}
Run Code Online (Sandbox Code Playgroud)
我想为这个枚举编写一个扩展方法(类似于Prize的答案)但是该方法适用于枚举的实例,ala
Things thing; var list = thing.ToSelectList();
Run Code Online (Sandbox Code Playgroud)
我希望它能用于实际的枚举:
var list = Things.ToSelectList();
Run Code Online (Sandbox Code Playgroud)
我可以这样做
var list = default(Things).ToSelectList();
Run Code Online (Sandbox Code Playgroud)
但我不喜欢那样:)
我已经接近以下扩展方法:
public static SelectList ToSelectList(this Type type)
{
if (type.IsEnum)
{
var values = from Enum e in Enum.GetValues(type)
select new { ID = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name");
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
var list = typeof(Things).ToSelectList(); …
Run Code Online (Sandbox Code Playgroud)