protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
switch (e.KeyCode)
{
case Keys.Down:
case Keys.Right:
SelectItem(SelectedIndex + 1);
break;
case Keys.Left:
case Keys.Up:
SelectItem(SelectedIndex - 1);
break;
case Keys.PageDown:
SelectItem(SelectedIndex + visibleItemsCount - 1);
break;
case Keys.PageUp:
SelectItem(SelectedIndex - visibleItemsCount + 1);
break;
case Keys.Home:
SelectItem(0);
break;
case Keys.End:
SelectItem(Items.Count - 1);
break;
default:
// Key filter.
char c = KeyHelper.GetLastInputChar();
if (char.IsLetterOrDigit(c) || char.IsPunctuation(c))
{
keyFilter += char.ToLower(c);
var itemIndex = FindItemIndex(x => x != null && x.ToString().ToLower().StartsWith(keyFilter));
SelectItem(itemIndex);
if (keyTimer == null)
{
keyTimer = new Timer();
keyTimer.Interval = keyFilterResetTime * 1000;
keyTimer.Tick += (sender, args) => ResetKeyFilter();
}
keyTimer.Stop();
keyTimer.Start();
}
break;
}
}