Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从组合框中获取枚举值并将其存储为整数?_C#_Winforms_Enums_Combobox - Fatal编程技术网

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谢谢,这更清楚了。