Я искал ответ, и хотя есть тот, который работает при использовании списка с элементами строки типа, я не могу понять, как конвертировать, когда мои элементы имеют тип
KeyValuePair<string, ChangeRec>
Я хочу иметь возможность выполнять поиск по мере ввода списка (не могу использовать ComboBox, поскольку элемент управления должен иметь определенный размер в форме), выполняя поиск по ключевому (текстовому) элементу. Спасибо @Marcel Popescu за отправную точку. Вот моя версия кода (прокомментирован только над строкой, где он терпит неудачу, так как он правильно не может преобразовать элемент kvp в строку):
private string searchString;
private DateTime lastKeyPressTime;
private void lbElementNames_KeyPress(object sender, KeyPressEventArgs e)
{
this.IncrementalSearch(e.KeyChar);
e.Handled = true;
}
private void IncrementalSearch(char ch)
{
if ((DateTime.Now - this.lastKeyPressTime) > new TimeSpan(0, 0, 1))
{
this.searchString = ch.ToString();
}
else
{
this.searchString += ch;
}
this.lastKeyPressTime = DateTime.Now;
//* code falls over HERE *//
var item =
this.lbElementNames.Items.Cast<string>()
.FirstOrDefault(it => it.StartsWith(this.searchString, true, CultureInfo.InvariantCulture));
if (item == null) return;
var index = this.lbElementNames.Items.IndexOf(item);
if (index < 0) return;
this.lbElementNames.SelectedIndex = index;
}