【问题标题】:Getting selected value of a combobox获取组合框的选定值
【发布时间】:2011-10-17 13:57:45
【问题描述】:
public class ComboboxItem { 
            public string Text { get; set; } 
            public string Value { get; set; }
            public override string ToString() { return Text; } 
        }

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedIndex = comboBox1.SelectedIndex;
            int selecteVal = (int)comboBox1.SelectedValue; 
            ComboboxItem selectedCar = (ComboboxItem)comboBox1.SelectedItem;
            MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));
        }

我将它们添加为:

ComboboxItem item = new ComboboxItem();
                    item.Text = cd.Name;
                    item.Value = cd.ID;
                    this.comboBox1.Items.Add(item);

我不断收到 NullReferenceExeption,但不知道为什么。文本似乎显示得很好。

【问题讨论】:

    标签: c# combobox selecteditem selectedvalue selectedindexchanged


    【解决方案1】:

    试试这个:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox cmb = (ComboBox)sender;
        int selectedIndex = cmb.SelectedIndex;
        int selectedValue = (int)cmb.SelectedValue;
    
        ComboboxItem selectedCar = (ComboboxItem)cmb.SelectedItem;
        MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));        
    }
    

    【讨论】:

    • 我认为 ComboBoxItem 类仅在 WPF 项目中可用。
    • OP 在他们的帖子中声明了它。很惊讶 System.Windows.Forms 命名空间中没有一个...或者我错过了什么?
    【解决方案2】:

    你得到NullReferenceExeption 因为你使用的是空的cmb.SelectedValuecomboBox 不知道您的自定义类 ComboboxItem 的值是什么,所以要么这样做:

    ComboboxItem selectedCar = (ComboboxItem)comboBox2.SelectedItem;
    int selecteVal = Convert.ToInt32(selectedCar.Value);
    

    或者更好的是使用数据绑定,例如:

    ComboboxItem item1 = new ComboboxItem();
    item1.Text = "test";
    item1.Value = "123";
    
    ComboboxItem item2 = new ComboboxItem();
    item2.Text = "test2";
    item2.Value = "456";
    
    List<ComboboxItem> items = new List<ComboboxItem> { item1, item2 };
    
    this.comboBox1.DisplayMember = "Text";
    this.comboBox1.ValueMember = "Value";
    this.comboBox1.DataSource = items;
    

    【讨论】:

    • 在不使用数据源的情况下,无论如何都不能将comboBox.SelectedValue 用于自定义项目吗?例如。如果您使用数据源,则无法将项目删除或添加到组合框项目。
    【解决方案3】:

    我遇到了类似的错误,我的班级是

    public class ServerInfo
    {
        public string Text { get; set; }
        public string Value { get; set; }
        public string PortNo { get; set; }
    
        public override string ToString()
        {
            return Text;
        }
    }
    

    但是我所做的是,我将我的类强制转换为 ComboBox 的 SelectedItem 属性。所以,我将拥有所选项目的所有类属性。

    // Code above
    ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem;
    
    mailClient.ServerName = emailServer.Value;
    mailClient.ServerPort = emailServer.PortNo;
    

    我希望这对某人有所帮助! 干杯!

    【讨论】:

      【解决方案4】:

      试试这个:

      private void cmbLineColor_SelectedIndexChanged(object sender, EventArgs e)
          {
              DataRowView drv = (DataRowView)cmbLineColor.SelectedItem;
              int selectedValue = (int)drv.Row.ItemArray[1];
          }
      

      【讨论】:

        【解决方案5】:

        SelectedValue 的问题是没有转换为整数。这是主要问题,因此使用以下代码 sn-p 将帮助您:

        int selectedValue;
        bool parseOK = Int32.TryParse(cmb.SelectedValue.ToString(), out selectedValue);
        

        【讨论】:

          【解决方案6】:

          试试这个:

          int selectedIndex = comboBox1.SelectedIndex;
          comboBox1.SelectedItem.ToString();
          int selectedValue = (int)comboBox1.Items[selectedIndex];
          

          【讨论】:

          • OP 有一个 C# 问题。你的答案看起来像 C++。
          【解决方案7】:

          您必须将所选项目转换为您的自定义类 (ComboboxItem) 试试这个:

          private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
          {
          ComboBox cmb = (ComboBox)sender;
                      int selectedIndex = cmb.SelectedIndex;
                      string selectedText = this.comboBox1.Text;
                      string selectedValue = ((ComboboxItem)cmb.SelectedItem).Value.ToString();
          
          ComboboxItem selectedCar = (ComboboxItem)cmb.SelectedItem;
          MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));        
          

          }

          【讨论】:

            猜你喜欢
            • 2013-08-15
            • 2013-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多