从ComboBox获取枚举值并将其存储为整数?

时间:2019-08-30 16:07:52

标签: c# winforms enums combobox

我有一些枚举,其中存储了一些城市的邮政编码。

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”)。

有什么提示吗?

2 个答案:

答案 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属性。