The best way to do this is to use the DataSource property of the ComboBox, so the Combobox is already prepared to use the DataBinding, not to mention that if the key field value is of a different type of string, have to use casts by code, see an example below:
// ***** Exemplo 1 - Utilizando uma List
// Neste exemplo utilizarei uma lista de KeyValuePar para identificar os meus itens.
var lstData = new List<KeyValuePair<int, string>>
{
new KeyValuePair<string, string>(1, "Valor 1"),
new KeyValuePair<string, string>(2, "Valor 2"),
new KeyValuePair<string, string>(3, "Valor 3"),
new KeyValuePair<string, string>(4, "Valor 4")
};
cboComboBox1.DataSource = null;
cboComboBox1.Items.Clear();
// Utilizo um BindingSource para "bindar os dados com os itens do Combobox"
cboComboBox1.DataSource = new BindingSource(lstData, null);
// Aqui fala qual será o campo a ser exibido
cboComboBox1.DisplayMember = "Value";
// Aqui fala qual campo será selecionado
cboComboBox1.ValueMember = "Key";
// ***** Exemplo 2 - Utilizando uma List de um objeto
// Neste exemplo utilizarei uma lista de KeyValuePar para identificar os meus itens.
class ObjetoTeste
{
public ObjetoTeste (int codigo, string descricao)
{
this.Codigo = codigo;
this.Descricao = descricao;
}
public int Codigo { get; private set; }
public string Descricao { get; private set; }
}
var lstData = new List<ObjetoTeste>
{
new ObjetoTeste(1, "Valor 1"),
new ObjetoTeste(2, "Valor 2"),
new ObjetoTeste(3, "Valor 3"),
new ObjetoTeste(4, "Valor 4")
};
cboComboBox1.DataSource = null;
cboComboBox1.Items.Clear();
// Utilizo um BindingSource para "bindar os dados com os itens do Combobox"
cboComboBox1.DataSource = new BindingSource(lstData, null);
// Aqui fala qual será o campo a ser exibido
cboComboBox1.DisplayMember = "Value";
// Aqui fala qual campo será selecionado
cboComboBox1.ValueMember = "Key";
When you get the data from the combobox, just use the SelectedValue property of it:
int intCodigoSelecionado = (int) cboComboBox1.SelectedValue;