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

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

private List<string>_listVisibleNodes = new List<string>();

private string_lastSelectedNodePath = string.Empty;

/// <summary>

/// 保存当前树的展现

/// </summary>

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);

}

}

/// <summary>

/// 恢复原来的状态

/// </summary>

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);

}

}

/// <summary>

/// 刷新树,调用

/// </summary>

public void RefreshTree()

{

GetTreeNodesStatus(this.tvProject.Nodes);

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

//

//添加节点

//

SetTreeNodesStatus(this.tvProject.Nodes);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值