private bool KeySearchString (KeyEventArgs ke)
{
int current_tickcnt = Environment.TickCount;
if (keysearch_tickcnt > 0 && current_tickcnt - keysearch_tickcnt > keysearch_keydelay) {
keysearch_text = string.Empty;
}
if (!Char.IsLetterOrDigit ((char)ke.KeyCode))
return false;
keysearch_text += (char)ke.KeyCode;
keysearch_tickcnt = current_tickcnt;
int prev_focused = FocusedItem == null ? 0 : FocusedItem.DisplayIndex;
int start = prev_focused + 1 < Items.Count ? prev_focused + 1 : 0;
ListViewItem item = FindItemWithText (keysearch_text, false, start, true, true);
if (item != null && prev_focused != item.DisplayIndex) {
selected_indices.Clear ();
SetFocusedItem (item.DisplayIndex);
item.Selected = true;
EnsureVisible (GetItemIndex (item.DisplayIndex));
}
return true;
}