/// <summary> /// When down key is pressed, selected element should move forward. /// When up key is pressed, selected element should move back. /// </summary> public void MoveSelection(Direction direction) { var oldItem = FilteredResults.FirstOrDefault(item => item.IsSelected); if (oldItem == null) { return; } int newItemIndex = FilteredResults.IndexOf(oldItem); if ((newItemIndex <= 0 && direction == Direction.Up) || (newItemIndex >= FilteredResults.Count() - 1 && direction == Direction.Down)) { return; } if (direction == Direction.Down) { newItemIndex++; } else { newItemIndex--; } oldItem.IsSelected = false; var newItem = FilteredResults.ElementAt(newItemIndex); newItem.IsSelected = true; }
private void ShowResults() { SearchResultsList.SuspendLayout(); SearchResultsList.Items.Clear(); if (AlwaysShowList || !IsSearchBoxEmpty()) { var topResults = FilteredResults.Count() > MaxResults?FilteredResults.Take(MaxResults).ToList() : FilteredResults; bool first = true; foreach (var item in topResults) { var name = GetNameForObject(item); var hintText = GetHintForObject(item); var emphasis = GetHintEmphasisRangeForObject(item); var image = OnGetIconForItem != null?OnGetIconForItem(item) : null; var menuItem = new ToolStripButtonWithHint(name, image, hintText); menuItem.EmphasisStart = emphasis.X; menuItem.EmphasisEnd = emphasis.Y; SearchResultsList.Items.Add(menuItem); if (first) { menuItem.Select(); first = false; } menuItem.Click += MenuItemClick; } var unshownCount = FilteredResults.Count() - topResults.Count(); if (unshownCount > 0) { SearchResultsList.Items.Add(new ToolStripLabel(String.Format(" + {0} more (continue typing to filter further)", unshownCount)) { ForeColor = Color.Gray }); } SearchResultsList.ResumeLayout(); if (!SearchResultsList.Visible) { SearchResultsList.Show(new Point(Left, Bottom)); } } else { SearchResultsList.ResumeLayout(); SearchResultsList.Hide(); } }