using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ShortcutUtil { public partial class SearchForm : Form { public SearchForm() { InitializeComponent(); } private List<string> allOptions = new List<string>(); private List<Tuple<string, int>> displayOptions = new List<Tuple<string, int>>(); public T GetSelection<T>(string title, string optionsName, List<Tuple<T, string>> options) where T : class { allOptions = options.Select(s => s.Item2).ToList(); Text = title; optionsLabel.Text = optionsName; if (searchBox.Text != "") { searchBox.Text = ""; } else { UpdateDisplay(); } if (ShowDialog() == DialogResult.OK && optionsList.SelectedIndex >= 0 && optionsList.SelectedIndex < displayOptions.Count) { return options[displayOptions[optionsList.SelectedIndex].Item2].Item1; } return null; } private void UpdateDisplay() { string search = searchBox.Text.Trim().ToLower(); displayOptions = allOptions.Select((s, index) => new Tuple<string, int>(s, index)).Where(s => s.Item1.ToLower().Contains(search)).ToList(); optionsList.Items.Clear(); optionsList.Items.AddRange(displayOptions.Select(o => o.Item1).ToArray()); } private void searchBox_TextChanged(object sender, EventArgs e) { UpdateDisplay(); } } }