我正在使用treeview,当我选择父节点或子节点时,我使用此代码表格检查并取消选中所有子节点
private bool updatingTreeView;
private void CheckChildren_ParentSelected(TreeNode node, Boolean isChecked)
{
foreach (TreeNode item in node.Nodes)
{
item.Checked = isChecked;
if (item.Nodes.Count > 0)
{
this.CheckChildren_ParentSelected(item, isChecked);
}
}
}
private void SelectParents(TreeNode node, Boolean isChecked)
{
//MessageBox.Show(node.Parent.ToString());
if (node.Parent != null)
{
node.Parent.Checked = isChecked;
SelectParents(node.Parent, isChecked);
}
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (updatingTreeView) return;
updatingTreeView = true;
CheckChildren_ParentSelected(e.Node, e.Node.Checked);
SelectParents(e.Node, e.Node.Checked);
updatingTreeView = false;
}
但现在
问题在于:
当我取消选中子节点时,我只想在树视图中取消选中所有子节点。
像这张照片一样:
但是我的代码所有父母和孩子(两者)都未经检查!!!
所以现在我想知道如何只取消选中treeview中的所有子节点,
现在如何更改此代码以解决此问题?
亲切的问候。
答案 0 :(得分:1)
"当我取消选中子节点时,我只想在树视图中取消选中所有子节点。"
换句话说,您不想取消选中父节点?
在这种情况下,只在选择节点时调用SelectParents():
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (updatingTreeView) return;
updatingTreeView = true;
CheckChildren_ParentSelected(e.Node, e.Node.Checked);
if (e.Node.Checked)
{
SelectParents(e.Node, e.Node.Checked);
}
updatingTreeView = false;
}