C#中的枚举和combobox

我目前正在开发一个C#应用程序。

我需要使用带有combobox的枚举来获取所选月份。 我有以下内容来创建枚举:

enum Months { January = 1, February, March, April, May, June, July, August, September, October, November, December }; 

然后我使用以下内容初始化combobox:

 cboMonthFrom.Items.AddRange(Enum.GetNames(typeof(Months))); 

这段代码工作正常,但问题是当我尝试获取所选月份的选定枚举值

为了从combobox中获取枚举器的值,我使用了以下内容:

 private void cboMonthFrom_SelectedIndexChanged(object sender, EventArgs) { Months selectedMonth = (Months)cboMonthFrom.SelectedItem; Console.WriteLine("Selected Month: " + (int)selectedMonth); } 

但是,当我尝试运行上面的代码时,会出现一个错误,指出发生System.InvalidCastException类型的第一次机会exception。

我做错了什么。

感谢您的任何帮助,您可以提供

试试这个

 Months selectedMonth = (Months)Enum.Parse(typeof(Months), cboMonthFrom.SelectedItem.ToString()); 

代替

 Months selectedMonth = (Months)cboMonthFrom.SelectedItem; 

更新了正确的更改

问题是你用字符串名称填充combobox( Enum.GetNames返回string[] ),然后你尝试将它Enum.GetNames为你的枚举。 一种可能的解决方案是:

 Months selectedMonth = (Months)Enum.Parse(typeof(Months), cboMonthFrom.SelectedItem); 

我还会考虑使用.Net的现有月份信息而不是添加你的枚举:

 var formatInfo = new System.Globalization.DateTimeFormatInfo(); var months = Enumerable.Range(1, 12).Select(n => formatInfo.MonthNames[n]); 

尝试

 Months selectedMonth = (Months) Enum.Parse(typeof(Months), cboMonthFrom.SelectedItem); 

根本没有理由使用Enum.GetNames 。 如果你真的想要几个月,为什么要在ComboBox中存储字符串?

只需使用Enum.GetValues

 foreach (var month in Enum.GetValues(typeof(Months))) cboMonthFrom.Items.Add(month); [...] // This works now Months selectedMonth = (Months)cboMonthFrom.SelectedItem; 

您已经在combobox中存储了月份的名称,而不是int值。 您选择的项目将是一个字符串。