Exemplo n.º 1
0
        void OnUpdateDisplay(object sender, EventArgs e)
        {
            treeView1.AfterSelect -= treeView1_AfterSelect;
            treeView1.BeginUpdate();
            treeView1.SuspendLayout();
            treeView1.Nodes.Clear();
            var items = _model.GetTreeItems();

            foreach (var item in items)
            {
                var node = item.MakeTreeNode();
                treeView1.Nodes.Add(node);
//                if(item.Selected)
//                    treeView1.SelectedNode = node;
            }
            treeView1.ExpandAll();
            var selectedItem = _model.GetSelectedItem(items);

            foreach (TreeNode topLevelNode in treeView1.Nodes)
            {
                if (topLevelNode.Tag == selectedItem)
                {
                    treeView1.SelectedNode = topLevelNode;
                    break;
                }
                foreach (TreeNode node in topLevelNode.Nodes)
                {
                    if (node.Tag == selectedItem)
                    {
                        //This will not actually work under a number of circumstances
                        //and caused a crash in WeSay and some really wierd behavior in the palaso writing systems UI test app
                        //see http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/4843bab1-a7fb-48d6-a66a-80b2e7232e73
                        treeView1.SelectedNode = node;
                        break;
                    }
                }
            }
            //if there is no current selection, need to create a dummy invisible node
            //to be selected, else the tree view control selects the first one
            if (selectedItem == null)
            {
                treeView1.SelectedNode = treeView1.Nodes.Add(string.Empty);
            }
            treeView1.ResumeLayout(false);
            treeView1.EndUpdate();
            if (treeView1.SelectedNode != null)
            {
                treeView1.SelectedNode.EnsureVisible();
            }
            treeView1.AfterSelect += treeView1_AfterSelect;
        }