예제 #1
0
        public void SelectCatalogNode(string path, int curID)
        {
            // find and select needed node
            SuspendLayout();
            CatalogNode node = catalogNode;

            if (node == null)
            {
                ResumeLayout();
                return;
            }

            char[]   cpinChar = CatalogNode.CatalogPathInitial.ToCharArray();
            string[] steps    = path.Replace(" ", "").Trim(cpinChar).Split(cpinChar);

            for (int i = 0; i < steps.Length; i++)
            {
                Console.WriteLine("{0}: Step: {1} {2}", DateTime.Now.ToString("HH:mm:ss fff"), i, steps[i]);
                bool changed = false;

                // searching for node
                for (int j = 0; j < node.Nodes.Count && node.Nodes[j].Text != ""; j++)
                {
                    var subNode = node.Nodes[j] as CatalogNode;
                    if (subNode != null && subNode.Path == CatalogNode.CatalogPathInitial + steps[i])
                    {
                        node    = subNode;
                        changed = true;
                        break;
                    }
                }

                if (changed) // node found
                {
                    node.EnsureVisible();
                }
                else // not found -> reloading
                {
                    node.Nodes.Clear();
                    node.Nodes.Add(new TreeNode());

                    Console.WriteLine("{0}: Load subnodes", DateTime.Now.ToString("HH:mm:ss fff"));
                    node.LoadSubNodes();

                    // searching for node again
                    for (int j = 0; j < node.Nodes.Count; j++)
                    {
                        var subNode = (CatalogNode)node.Nodes[j];
                        if (subNode.Path == CatalogNode.CatalogPathInitial + steps[i])
                        {
                            node    = subNode;
                            changed = true;
                            break;
                        }
                    }
                }

                if (!changed)
                {
                    break;
                }
            }
            node.SetCurID(curID);
            ResumeLayout();
            SelectedNode = node;
        }