public IconSelectorTreeView() { ImageList = new ImageList(); // we need all the icons (to show them as open, too) // but we only iterate through the closed ones TreeNode firstWordNode = new TreeNode("just avoiding a null pointer exception"); // we need a sorted set List<NamedIconSet> sortedList = new List<NamedIconSet>(IconList.Instance.icons.Values); sortedList.Sort(); int i = 0; foreach (NamedIconSet set in sortedList) { string fancyName; NamedImage image = set.ImageUnselected; fancyName = image.FancyName; string lastPartOfFancyName = fancyName.Substring(fancyName.IndexOf(" ")); TreeNode node = new TreeNodeIconSelector(lastPartOfFancyName, set); node.ImageIndex = i++; ImageList.Images.Add(set.ImageUnselected.image); node.SelectedImageIndex = i++; ImageList.Images.Add(set.ImageSelected.image); // now create the node where we'll put it if necessary string firstWord = fancyName.Substring(0, fancyName.IndexOf(" ")); if (!firstWord.Equals(firstWordNode.Text)) { firstWordNode = new TreeNode(firstWord); firstWordNode.ImageIndex = i - 2; Nodes.Add(firstWordNode); } firstWordNode.Nodes.Add(node); } initializing = true; }
protected override void OnAfterSelect(TreeViewEventArgs e) { base.OnAfterSelect(e); if (initializing) initializing = false; else { SelectedNodeCached = SelectedNode as TreeNodeIconSelector; this.FindForm().Close(); } }