Ну, если я правильно понимаю ваш вопрос, тогда я скажу, что вы чувствуете, что это правильно. Вам не нужно использовать несколько комбинаций для отслеживания данных / значения (т. Е. Идентификатора в вашем случае).
Обычно для этого нам необходимо назначить источник данных в поле со списком, чтобы при получении события, выбранного для изменения индекса, он предоставлял вам текст, а также прикрепленный идентификатор. Задайте для DisplayMember столбец набора данных, содержащий текст, а для свойства ValueMember - столбец набора данных, содержащий идентификатор.
DataSet yourDataSource = SomeGetDataSourceMethod(); //get your data source ready.
this.cbxLookup.DataSource = yourDataSource;
this.cbxLookup.DisplayMember ="EmployeeName";
this.cbxLookup.ValueMember = "EmployeeID";
После события SelectedIndexChanged вы можете получить SelectedItem, SelectedIndex, SelectedValue.
Также вы можете сделать следующее:
int value=1;
cbxLookup.Items.Add(new ListViewItem("Your Name", value));
- РЕДАКТИРОВАТЬ 2 -
Определите структуру следующим образом:
class KeyValueData
{
public KeyValueData(string Text)
{
text = Text;
itemData = 0;
}
public KeyValueData(string Text, int ItemData)
{
text = Text;
itemData = ItemData;
}
public int ItemData
{
get
{
return itemData;
}
set
{
itemData = value;
}
}
public override string ToString()
{
return text;
}
protected string text;
protected int itemData;
}
// и затем добавьте в комбо как:
comboBox1.Items.Add(new KeyValueData("New Yorkers", 21));
- РЕДАКТИРОВАТЬ 1 -
Для второй части, предполагая, что вы используете .NET 2.0, вы можете получить событие KeyPress и использовать метод ComboBox.FindString . Этот пример может помочь.