Получение выбранного значения 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 и не знаю почему. текст кажется очень хорошим.

    Попробуй это:

     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 который является нулевым. comboBox не знает, каково значение вашего пользовательского classа 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 items = new List { item1, item2 }; this.comboBox1.DisplayMember = "Text"; this.comboBox1.ValueMember = "Value"; this.comboBox1.DataSource = items; 

    У меня была аналогичная ошибка, My Class

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

    Но что я сделал, я отбросил свой class на свойство SelectedItem ComboBox. Итак, у меня будут все свойства classа выбранного элемента.

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

    Я надеюсь, что это помогает кому-то! Ура!

    Проблема, которую вы имеете с SelectedValue , не преобразуется в целое. Это основная проблема, поэтому использование следующего fragmentа кода поможет вам:

     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]; } 
    Давайте будем гением компьютера.