2

私は 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;
}

でも今

ここに問題があります:

子ノードのチェックを外すと、ツリービューですべての子ノードのチェックを外すだけです。

この写真のように:

nchecked すべての子ノード

しかし、私のコードでは、すべての親と子 (両方) がチェックされていません!!!

だから今、ツリービューのすべての子ノードのみをチェック解除する方法を知りたいのですが、

この問題を修正するためにこのコードを変更する方法は?

敬具。

4

1 に答える 1

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;
}
于 2013-04-30T23:08:42.010 に答える