/// <summary>
/// 获取所有选中节点
/// </summary>
/// <param name="trCollection"></param>
/// <param name="listNode"></param>
public static void GetCheckedNode(TreeNodeCollection trCollection ,List<TreeNode> listNode)
{
foreach(TreeNode trNode in trCollection)
{
if (trNode.Checked)
listNode.Add(trNode);
if (trNode.Nodes.Count > 0)
GetCheckedNode(trNode.Nodes, listNode);
}
}
/// <summary>
/// 当前节点选中,其所有子节点选中
/// </summary>
/// <param name="tn"></param>
/// <param name="Checked"></param>
public static void SetNodeCheckStatus(TreeNode tn, bool Checked)
{
if (tn == null) return;
foreach (TreeNode tnChild in tn.Nodes)
{
tnChild.Checked = Checked;
SetNodeCheckStatus(tnChild, Checked);
}
//TreeNode tnParent = tn;
}
/// <summary>
/// 当前节点选中,其所有父节点选中
/// </summary>
/// <param name="tn"></param>
/// <param name="Checked"></param>
public static void SetParentNodeStyle(TreeNode Node)
{
if (Node.Parent == null) return;
if (Node.Checked)
{
Node.Parent.Checked = true;
SetParentNodeStyle(Node.Parent);
}
}
/// <summary>
/// 某节点所有子节点选中,该节点选中
/// </summary>
/// <param name="Node"></param>
public static void SetNodeStyle(TreeNode Node)
{
int nNodeCount = 0;
if (Node.Nodes.Count != 0)
{
foreach (TreeNode tnTemp in Node.Nodes)
{
if (tnTemp.Checked == true)
nNodeCount++;
}
if (nNodeCount == Node.Nodes.Count)
{
Node.Checked = true;
Node.ForeColor = Color.Black;
}
else if (nNodeCount == 0)
{
Node.Checked = false;
Node.ForeColor = Color.Black;
}
else
{
Node.Checked = false;
Node.ForeColor = Color.Gray;
}
}
//当前节点选择完后,判断父节点的状态,调用此方法递归。
if (Node.Parent != null)
SetNodeStyle(Node.Parent);
}
/// <summary>
/// 根据节点ID从TreeView中找到该节点 适用于没有重复ID的数据
/// </summary>
/// <param name="nNodeID"></param>
/// <param name="trCollect"></param>
/// <returns></returns>
public static TreeNode GetTrNodeByValue(int nNodeID, TreeNodeCollection trCollect)
{
for (int i = 0; i < trCollect.Count; i++)
{
if (Convert.ToInt32(trCollect[i].Tag) == nNodeID)
return trCollect[i];
}
return null;
}
/// <summary>
/// 清空选中节点
/// </summary>
/// <param name="trNode"></param>
/// <returns></returns>
public static void SetTreeViewNodeChecked(TreeNode trNode)
{
foreach(TreeNode tr in trNode.Nodes)
{
tr.Checked = false;
if (tr.Nodes.Count > 0)
{
SetTreeViewNodeChecked(tr);
}
}
}