Если вы установите AutoCompleteMode = SuggestAppend
и AutoCompleteSource = ListItems
, когда пользователь что-то печатает, автоматически в поле со списком выводятся записи, которые начинаются с набранных символов.
Затем, обрабатывая события SelectedIndexChanged
или SelectedValueChanged
, вы сможете перехватывать, когда пользователь точно вводит значение, присутствующее в списке значений.
Если вы также абсолютно не хотите, чтобы пользователь печатал что-либо, чего нет в списке, ну да, вы должны обработать, например, KeyDown
событие, например:
private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
char ch = (char)e.KeyValue;
if (!char.IsControl(ch))
{
string newTxt = this.comboBox1.Text + ch;
bool found = false;
foreach (var item in this.comboBox1.Items)
{
string itemString = item.ToString();
if (itemString.StartsWith(newTxt, StringComparison.CurrentCultureIgnoreCase))
{
found = true;
break;
}
}
if (!found)
e.SuppressKeyPress = true;
}
}