想实现的功能:
1.当点选/取消父节点时,子节点全部选中/取消
2.当点选任何一个子节点时,父节点也选中,当子节点全为空时,父节点也为空第1个功能已实现,第2个还未实现,请高手指点代码如下:private void treeView2_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
{
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
{
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
}
e.Node.Parent.Checked = bol;
}
}//选中子节点
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
1.当点选/取消父节点时,子节点全部选中/取消
2.当点选任何一个子节点时,父节点也选中,当子节点全为空时,父节点也为空第1个功能已实现,第2个还未实现,请高手指点代码如下:private void treeView2_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
{
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
{
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
}
e.Node.Parent.Checked = bol;
}
}//选中子节点
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
bool bol = false;
if (e.Node.Parent != null)
{
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
{
if (e.Node.Parent.Nodes[i].Checked)
bol = true;
}
e.Node.Parent.Checked = bol;}
{
if(e.Node.Checked)//子节点选中,父节点自动选中
{
e.Node.Parent.Checked = true;
}
else//子节点不选,则检索同一父亲下的所有兄弟,如果全不选,则父节点为空
{
bool allNotChecked = true;
foreach(TreeNode node in e.Node.Parent.Nodes)
{
if(node.Checked)
{
allNotChecked = false;
break;
}
}
if(allNotChecked) e.Node.Parent.Checked = false;
}
}
//选中父节点
public void CheckAllParentNodes(TreeNode treeNode, bool nodeChecked)
{
bool bol = false;
if (e.Node.Parent != null)
{
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
{
if (e.Node.Parent.Nodes[i].Checked)
bol = true;
}
e.Node.Parent.Checked = bol;
CheckAllParentNodes(e.Node.Parent,bol);
}
}