void Core.IBuild.Build() { if (Ctrl.Current.Entries.Count > 1) { // 複数選択の場合 treeView.BeginUpdate(); _selectedNodes.Clear(); Core.IEntry[] entries = new Core.IEntry[Ctrl.Current.Entries.Count]; Ctrl.Current.Entries.CopyTo(entries, 0); foreach (Core.IEntry entry in entries) { TreeNode node = TreeNodeBuilder.Find(this.Root, entry.Path); if (node != null) { _selectedNodes.Add(node); } } treeView.EndUpdate(); } else { // 単数選択または選択無しの場合 TreeNode selected1 = null; Core.IEntry selEntry = Core.Document.Current.SelectedEntry; if (selEntry != null) { selected1 = TreeNodeBuilder.Find(this.Root, selEntry.Path); } TreeNode selected2 = _selectedNodes.Value; while (selected2 != null) { if (selected2.Tag is TreeNodeBuilder) { break; } selected2 = selected2.Parent; } if (selected1 != selected2) { if (selected1 != null) { _selectedNodes.Value = selected1; selected1.EnsureVisible(); } else { _selectedNodes.Value = null; SelectNode(null, false); } } } }
public static TreeNode Find(TreeNodeBuilder root, int[] path) { TreeNode found = null; TreeNodeBuilder it = root; foreach (int id in path) { found = it.Find(id); if (found == null) { return(null); } it = (TreeNodeBuilder)found.Tag; } return(found); }