2011-08-01 30 views
28
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)); 
     } 

los estoy añadiendo como:valor seleccionado de un cuadro combinado

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

me siguen dando un NullReferenceExeption y no sabe por qué. el texto parece mostrarse bien.

Respuesta

31

Prueba esto:

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));   
} 
+6

creo que clase 'ComboBoxItem' está disponible sólo en proyectos de WPF. – T30

13

Usted está recibiendo NullReferenceExeption debido a que está utilizando el cmb.SelectedValue que es nulo. la comboBox no sabe cuál es el valor de la clase personalizada ComboboxItem, así que o lo hacen:

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

O, mejor es la unión de los datos de uso como:

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.DataSource = items; 
this.comboBox1.DisplayMember = "Text"; 
this.comboBox1.ValueMember = "Value"; 
+0

¿No está de todos modos para usar comboBox.SelectedValue para un artículo personalizado sin usar un dataSource? P.ej. si usa un origen de datos, no puede eliminar ni agregar un elemento a los Elementos del cuadro combinado. – user3532232

6

tuve un error similar, Mi La clase es

public class ServerInfo 
{ 
    public string Text { get; set; } 
    public string Value { get; set; } 
    public string PortNo { get; set; } 

    public override string ToString() 
    { 
     return Text; 
    } 
} 

Pero lo que hice, fundí mi clase en la propiedad SelectedItem del ComboBox. Entonces, tendré todas las propiedades de clase del elemento seleccionado.

// Code above 
ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem; 

mailClient.ServerName = emailServer.Value; 
mailClient.ServerPort = emailServer.PortNo; 

Espero que esto ayude a alguien! ¡Salud!

-1

Prueba esto:

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

El problema que tiene con el SelectedValue no está convirtiendo en número entero. Este es el problema principal, por lo usinge el siguiente fragmento de código le ayudará a:

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