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));
}
Je les ajoute comme:
ComboboxItem item = new ComboboxItem();
item.Text = cd.Name;
item.Value = cd.ID;
this.comboBox1.Items.Add(item);
Je continue à recevoir une exception NullReferenceExeption et je ne sais pas pourquoi. le texte semble bien apparaître.
Essaye ça:
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));
}
Vous obtenez NullReferenceExeption
parce que vous utilisez le cmb.SelectedValue
qui est null. le comboBox
ne sait pas quelle est la valeur de votre classe personnalisée ComboboxItem
, alors soit:
ComboboxItem selectedCar = (ComboboxItem)comboBox2.SelectedItem;
int selecteVal = Convert.ToInt32(selectedCar.Value);
Ou mieux, utilisez une liaison de données comme:
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;
J'ai eu une erreur similaire, ma classe est
public class ServerInfo
{
public string Text { get; set; }
public string Value { get; set; }
public string PortNo { get; set; }
public override string ToString()
{
return Text;
}
}
Mais ce que j'ai fait, j'ai jeté ma classe sur la propriété SelectedItem du ComboBox. Donc, je vais avoir toutes les propriétés de classe de l'élément sélectionné.
// Code above
ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem;
mailClient.ServerName = emailServer.Value;
mailClient.ServerPort = emailServer.PortNo;
J'espère que cela aide quelqu'un!
Essaye ça:
int selectedIndex = comboBox1->SelectedIndex;
comboBox1->SelectedItem->ToString();
int selectedValue = (int)comboBox1->Items[selectedIndex];
Le problème que vous avez avec SelectedValue
n'est pas la conversion en entier. C’est le principal problème. L’extrait de code suivant va donc vous aider:
int selectedValue;
bool parseOK = Int32.TryParse(cmb.SelectedValue.ToString(), out selectedValue);