private void ItemInfoDialogLoad(object sender, EventArgs e) { tvItems.BeginUpdate(); tvItems.Nodes.Clear(); tvItems.Nodes.Add("", "None"); if (AvailableSlots != null || _showAllItems) { foreach (var factory in FactoryManager.GetAllItems()) { if (!_showAllItems && !IsSlotAvailable(factory)) { continue; } var typeName = factory.GetType().Name; if (!tvItems.Nodes.ContainsKey(typeName)) { var cleanTypeName = typeName; if (typeName.EndsWith("Factory")) { cleanTypeName = typeName.Substring(0, typeName.Length - "Factory".Length); } tvItems.Nodes.Add(typeName, cleanTypeName); } tvItems.Nodes[typeName].Nodes.Add(factory.Name, factory.Name); } } tvItems.EndUpdate(); var select = tvItems.Nodes.Find(SelectedItemName, true); if (select.Length > 0) { tvItems.SelectedNode = select[0]; } else { tvItems.SelectedNode = null; } // Close directly if there are no items we can select. if (tvItems.Nodes.Count == 1) { MessageBox.Show("No slots remaining, or no items known that would fit the slots.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); DialogResult = DialogResult.Cancel; } }