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#如何保存树的展开状态】

    推荐阅读