c#如何保存树的展开状态

前提:每个node有唯一标识的东东,我的示例中展现的是文件夹,每个tooltip是文件/文件夹的路径。不同的唯一标识的话,把关于tooltip的相关方面更改即可

 

private List _listVisibleNodes = new List();

private string _lastSelectedNodePath  = string.Empty;

 

   ///

        /// 保存当前树的展现

        ///

        private void GetTreeNodesStatus(TreeNodeCollection nodes)

        {

            foreach (TreeNode node in nodes)

            {

                if (node.IsExpanded && (!this._listVisibleNodes.Contains(node.ToolTipText)))

                {

                    this._listVisibleNodes.Add(node.ToolTipText);

                }

                else if((!node.IsExpanded)&&this._listVisibleNodes.Contains(node.ToolTipText))

                {

                    this._listVisibleNodes.Remove(node.ToolTipText);

                }

                if (node.IsSelected)

                {

                    this._lastSelectedNodePath = node.FullPath;

                }

                GetTreeNodesStatus(node.Nodes);

            }

        }

 

        ///

        /// 恢复原来的状态

        ///

        private void SetTreeNodesStatus(TreeNodeCollection nodes)

        {

            foreach (TreeNode node in nodes)

            {

                if (this._listVisibleNodes.Contains(node.ToolTipText)&&!node.IsExpanded)

                {

                    node.Expand();

                }

                if (node.ToolTipText == this._lastSelectedNodePath)

                {

                    this.tvProject.SelectedNode = node;

                }

                SetTreeNodesStatus(node.Nodes);

            }

        }

 

 

 

   ///

        /// 刷新树,调用

        ///

        public void RefreshTree()

        {

                GetTreeNodesStatus(this.tvProject.Nodes);

 

                this.tvProject.Nodes.Clear();//清除之前的内容

//

//添加节点

//

                SetTreeNodesStatus(this.tvProject.Nodes);

            }

        }

 

你可能感兴趣的:(C#)