【问题标题】:C# How to get the Enum value from ComboBox in WinForms?C# 如何从 WinForms 中的 ComboBox 获取枚举值?
【发布时间】:2010-11-20 13:21:50
【问题描述】:

我正在将一个字典绑定到一个保留枚举值的组合框。

要检索我使用的选定值:
comboBox1.SelectedItem 返回维度值[0,Permanent]

我只想检索Permanent,然后将其转换回 Enum。

类似:
Employee.JobType = Enum.Parse(JobType, comboBox1.SelectedItem)

我怎样才能做到这一点?

【问题讨论】:

  • 嗨 Employee.JobType = (JobType)comboBox1.SelectedValue 试试这个

标签: c# winforms enums combobox


【解决方案1】:

我认为这样可以解决问题:

string[] parts = comboBox1.SelectedItem.Split(
                      new char[] { ',', '[', ']' }, 
                      StringSplitOptions.RemoveEmptyEntries);
Employee.JobType = (JobType)Enum.Parse(typeof(JobType), parts[1].Trim()));

首先,使用逗号和方括号分割字符串,并让该方法删除所有空元素。这应该会给您留下一个包含数字和文本的数组。使用文本部分进行枚举解析。

请注意,您需要将枚举的Type 对象传递给Parse 方法,然后您需要转换结果,因为Parse 的返回类型是object

【讨论】:

    【解决方案2】:

    如果组合框的项目源是字典,则 SelectedItem 的类型为:KeyValuePair

    您可以通过强制转换 SelectedItem 和访问 Value 属性来访问您的枚举值。

    var selectedItem = (KeyValuePair<[type of key], JobType>) comboBox1.SelectedItem;
    var jobType = selectedItem.Value;
    

    【讨论】:

    • 又好又干净的解决方案 tks
    【解决方案3】:
    Employee.JobType = (JobTypeEnum)Enum.Parse(typeof(JobTypeEnum), comboBox1.SelectedValue);
    

    【讨论】:

      【解决方案4】:

      要么:

      Employee.JobType = (JobType)Enum.Parse(typeof(JobType), comboBox1.SelectedValue);
      

      或者:

      Employee.JobType = (JobType)Enum.Parse(typeof(JobType), comboBox1.SelectedText);
      

      【讨论】:

      • 第一个需要一个 .ToString() 结尾。
      • 我会支持 Jack。第二个选项效果更好。
      【解决方案5】:

      看到这个——http://www.fmsinc.com/free/NewTips/NET/NETtip4.asp

      PeopleNames people = (PeopleNames)Enum.Parse(ComboBox1.SelectedValue, PeopleNames)
      

      数据绑定:

      ComboBox1.DataSource = System.Enum.GetValues(typeof(PeopleNames))
      

      【讨论】:

      • 参考的文章很好。正是我想要的。谢谢。
      【解决方案6】:

      我遇到了同样的问题 - (WPF) 我的组合包含键值对中的枚举。

      我可以得到枚举的唯一方法是通过

       KeyValuePair<string,string> selectedPair =  (KeyValuePair<string,string>)(cmbApplications.SelectedItem);
       ProTraceLicence.Products chosenProduct = (ProTraceLicence.Products)Enum.Parse(typeof(ProTraceLicence.Products), selectedPair.Key);
      

      希望这对某人有所帮助。没想到这么难

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2010-11-03
        • 2010-12-05
        • 1970-01-01
        相关资源
        最近更新 更多