获取组合框的选定值

Posted

技术标签:

【中文标题】获取组合框的选定值【英文标题】: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,但不知道为什么。文本似乎显示得很好。

【问题讨论】:

【参考方案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));        

【讨论】:

以上是关于获取组合框的选定值的主要内容,如果未能解决你的问题,请参考以下文章

用于获取组合框的选定文本的 PHP 代码

获取仅包含文本条目的组合框的选定文本的最简单方法是啥?

在 ExtJS 中获取组合框的值

如何检索组合框的选定值(不是文本)

如何在 php 中从表单提交的组合框中获取选定的值

如何将两个组合框的选定项与单个数据源分开?