我有一些枚举,其中存储了一些城市的邮政编码。
public enum cities_zip
{
Emsdetten = 48282,
Berlin = 12345,
Rheine = 48369,
}
我有一个组合框,上面充满了enum
:
combo_cities.DataSource = Enum.GetValues(typeof(cities_zip));
例如,当我选择柏林时,它并没有存储为整数。
int zipcode = combo_cities.SelectedValue;
显示“无法将类型对象转换为int”。
如果我这样做:
int zipcode = Convert.ToInt32(combo_cities.SelectedValue);
该整数的值为“ 0”,无论我选择哪个城市。
无论我选择哪个城市,使用SelectedIndex
都显示为-1。
使用SelectedItem
也不起作用(也显示为“ 0”)。
有什么提示吗?
答案 0 :(得分: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 :(得分:0)
简单的(int)combo_cities.SelectedValue
可以使用。
但是您还需要检查SelectedIndex
是否不同于-1,因为这意味着没有选择任何项目。像这样:
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);
而不是设置DataSource
属性。