Получение выбранного значения combobox
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 и не уверен, почему. текст, кажется, появляется просто отлично.
5 ответов
попробуйте это:
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));        
}
вы получаете NullReferenceExeption потому что вы используете cmb.SelectedValue что равно null. the comboBox не знает, что такое значение вашего пользовательского класса 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;
у меня была аналогичная ошибка, мой класс
public class ServerInfo
{
    public string Text { get; set; }
    public string Value { get; set; }
    public string PortNo { get; set; }
    public override string ToString()
    {
        return Text;
    }
}
но то, что я сделал, я привел свой класс к свойству SelectedItem ComboBox. Итак, у меня будут все свойства класса выбранного элемента.
// Code above
ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem;
mailClient.ServerName = emailServer.Value;
mailClient.ServerPort = emailServer.PortNo;
надеюсь, это кому-то поможет! Ура!
проблема у вас с SelectedValue не преобразуется в целое число. Это основная проблема, поэтому вам поможет следующий фрагмент кода:
int selectedValue;
bool parseOK = Int32.TryParse(cmb.SelectedValue.ToString(), out selectedValue);
попробуйте это:
private void cmbLineColor_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataRowView drv = (DataRowView)cmbLineColor.SelectedItem;
        int selectedValue = (int)drv.Row.ItemArray[1];
    }