C# 从组合框中获取枚举值并将其存储为整数?
我收集了一些城市的邮政编码C# 从组合框中获取枚举值并将其存储为整数?,c#,winforms,enums,combobox,C#,Winforms,Enums,Combobox,我收集了一些城市的邮政编码 public enum cities\u zip { Emsdetten=48282, 柏林=12345, Rheine=48369, } 我有一个组合框,里面充满了enums,如下所示: combo_cities.DataSource = Enum.GetValues(typeof(cities_zip)); int zipcode = Convert.ToInt32(combo_cities.SelectedValue); if( combo_cities.
public enum cities\u zip
{
Emsdetten=48282,
柏林=12345,
Rheine=48369,
}
我有一个组合框,里面充满了enum
s,如下所示:
combo_cities.DataSource = Enum.GetValues(typeof(cities_zip));
int zipcode = Convert.ToInt32(combo_cities.SelectedValue);
if( combo_cities.SelectedIndex > -1)
var selectedIntValue = (int)combo_cities.SelectedValue;
然而,当我选择柏林(Berlin)作为例子时,它并没有被存储为整数
int zipcode = combo_cities.SelectedValue;
它表示“无法将类型对象转换为int”
如果我这样做:
combo_cities.DataSource = Enum.GetValues(typeof(cities_zip));
int zipcode = Convert.ToInt32(combo_cities.SelectedValue);
if( combo_cities.SelectedIndex > -1)
var selectedIntValue = (int)combo_cities.SelectedValue;
无论我选择哪个城市,整数的值都是“0”
使用SelectedIndex
显示在-1,无论我选择哪个城市
使用SelectedItem
也不起作用(也显示为“0”)
有什么建议吗?我想这个例子有助于理解:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.DisplayMember = "CityName";
comboBox1.ValueMember = "CityValue";
comboBox1.DataSource = ListOfCities();
}
public List<City> ListOfCities()
{
List<City> list = new List<City>();
foreach (cities_zip city in Enum.GetValues(typeof(cities_zip)))
{
City newCity = new City();
newCity.CityName = city.ToString();
newCity.CityValue = (int)city;
list.Add(newCity);
}
return list;
}
}
public class City
{
public string CityName { get; set; }
public int CityValue { get; set; }
}
public enum cities_zip
{
Emsdetten = 48282,
Berlin = 12345,
Rheine = 48369,
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
comboBox1.DisplayMember=“CityName”;
comboBox1.ValueMember=“城市价值”;
comboBox1.DataSource=ListOfCities();
}
城市公共列表()
{
列表=新列表();
foreach(cities\u zip枚举中的city.GetValues(typeof(cities\u zip)))
{
城市新城=新城();
newCity.CityName=city.ToString();
newCity.CityValue=(int)城市;
列表。添加(新城);
}
退货清单;
}
}
公营城市
{
公共字符串CityName{get;set;}
公共int城市值{get;set;}
}
公共枚举城市
{
Emsdetten=48282,
柏林=12345,
Rheine=48369,
}
简单的(int)组合城市。选择的值将起作用
但是您还需要检查SelectedIndex
是否与-1不同,因为这意味着没有选择任何项目。大概是这样的:
combo_cities.DataSource = Enum.GetValues(typeof(cities_zip));
int zipcode = Convert.ToInt32(combo_cities.SelectedValue);
if( combo_cities.SelectedIndex > -1)
var selectedIntValue = (int)combo_cities.SelectedValue;
若要使上述各项生效,您必须致电:
foreach (Subject s in Enum.GetValues(typeof(cities_zip)).Cast<cities_zip>())
cbxSubject.Items.Add(s);
foreach(Enum.GetValues(typeof(cities_zip)).Cast()中的主题)
CBX subject.Items.Add(s);
而不是设置DataSource
属性。只是确认一下,这是winforms,对吗?您所描述的,SelectedIndex为-1,听起来好像没有选择项。就我所知,在相同的测试代码中(没有太多),这对我来说是可行的:在SelectedIndexChanged中,intx=(int)(发送者作为组合框)
获取所选枚举值的int值。使用枚举时,SelectedValue
将为您提供enum.ToString()
,而(int)SelectedValue
将返回关联的值(此处为int
)。在这种情况下,这同样适用于selectedItem
。如果您在选择之后得到一个SelectedIndex=-1
,那么您做了一些错误,这里没有显示。@Jimi SelectedValue不是这样的。如果未设置ValueMember
,它将返回实际的枚举值,与SelectedItem相同。@Ed Plunkett重新阅读注释时,我可能表达的概念过于松散。SelectedItem
和SelectedValue
都将枚举作为对象返回。如果您检查或打印它,您将看到[Enum].ToString()
。您可以将关联的值转换为它的值类型。@Jimi谢谢,这更清楚了。