async Task <SearchResult> query_item_by_name() { string itemName = null; while (string.IsNullOrEmpty(itemName)) { using (InputBox input = new InputBox("Please enter the item name", false)) if (input.ShowDialog(this) == DialogResult.OK) { itemName = input.Value; } if (string.IsNullOrEmpty(itemName)) { if (MessageBox.Show("You must enter an item name to continue!", "Empty Name", MessageBoxButtons.OKCancel, MessageBoxIcon.Hand) == DialogResult.Cancel) { break; } } } string selectedName = null; if (string.IsNullOrEmpty(itemName)) { MessageBox.Show("You have entered an invalid item name!", "Invalid Item Name", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { List <SearchResult> searchResults = await queryDBForItems(itemName); if (searchResults.Count == 0) { MessageBox.Show("Failed to query items from the database!", "SQL Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { List <string> resultNames = searchResults.Select(r => r.Name).ToList(); if (resultNames.Count == 0) { MessageBox.Show("Failed to query item names from search results!", "Result Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { using (ListSelect listSelect = new ListSelect("Please select an item", resultNames)) if (listSelect.ShowDialog(this) == DialogResult.OK) { selectedName = listSelect.SelectedText; } if (string.IsNullOrEmpty(selectedName)) { MessageBox.Show("Invalid selected name!", "Invalid Selection", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { return(searchResults.Find(r => r.Name == selectedName)); } } } } return(null); }