public void Link(ResourceNode res) { Unlink(); if (res != null) { this.Text = res.Name; TreeNodeCollection nodes = Nodes; //Should we continue down the tree? if ((IsExpanded) && (res.HasChildren)) { //Add/link each resource node foreach (ResourceNode n in res.Children) { bool found = false; foreach (BaseWrapper tn in nodes) { if (tn.Text == n.Name) { tn.Link(n); found = true; break; } } if (!found) { nodes.Add(Wrap(_owner, n)); } } //Remove empty nodes for (int i = 0; i < nodes.Count;) { BaseWrapper n = nodes[i] as BaseWrapper; if (n._resource == null) { n.Remove(); } else { i++; } } _discovered = true; } else { //Node will be reset and undiscovered nodes.Clear(); //Collapse(); if (res.HasChildren) { nodes.Add(new GenericWrapper() { _owner = _owner }); _discovered = false; } else { _discovered = true; } } SelectedImageIndex = ImageIndex = (int)res.ResourceType & 0xFF; res.ChildAdded += OnChildAdded; res.ChildRemoved += OnChildRemoved; res.ChildInserted += OnChildInserted; res.Replaced += OnReplaced; res.Restored += OnRestored; res.Renamed += OnRenamed; res.MovedUp += OnMovedUp; res.MovedDown += OnMovedDown; res.UpdateProps += OnUpdateProps; res.UpdateCurrControl += OnUpdateCurrControl; } _resource = res; }