将 Check 设置为 treeView 复选框

set Check to treeView checkbox

我有一个 TreeView 每个项目都有不同的代码。
用户可以检查 5 个项目并保存它们。然后我有一个 treeView 的节点代码列表。
我想以表单加载的形式向用户显示选中的项目。 但是我的代码不起作用。 有人可以帮我吗?

这是我的代码:

private void chechTreeViewItems(List<int> remID)
    {
        foreach ( System.Windows.Forms.TreeNode item in this.tvRemark.Nodes)
        {
            for (int i = 0; i < remID.Count; i++)
            {
                if (Convert.ToInt16(item.Tag)== remID[i])
                {
                     item.Checked = true;
                }
            }

        }

    }

我认为这段代码无法跟踪子节点。

做这样的事情:

private void ChechTreeViewItems(List<int> remId)
    {
        foreach (TreeNode item in this.Nodes)
        {
            if (remId.Contains(item.Tag))
            {
                item.IsChecked = true;
            }

            if (item.Children != null)
            {
                this.CheckChildTreeNodes(item.Children, remId);
            }
        }
    }

并调用递归 CheckChildTreeNodes 方法来确保相应地检查子节点。

private void CheckChildTreeNodes(IEnumerable<TreeNode> childnodes, ICollection<int> remId)
    {
       if (childnodes==null)
       {
          return;
       }
        foreach (TreeNode node in childnodes)
        {
            if (remId.Contains(node.Tag))
            {
                node.IsChecked = true;
            }
            this.CheckChildTreeNodes(node.Children, remId);
        }
    }

如果只有一个根节点有多个子节点(只有一层)那么这里就不需要递归了。只需在 foreach 循环中正确设置根节点即可:

private void chechTreeViewItems(List<int> remID)
{
    foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes)
    {
        for (int i = 0; i < remID.Count; i++)
        {
            if (Convert.ToInt16(item.Tag) == remID[i])
            {
                item.Checked = true;
            }
        }
    }
}

在你的帮助下我刚刚解决了我的问题。

private void chechTreeViewItems(List<int> remID)
    {
        for (int i = 0; i < remID.Count; i++)
        {

            foreach (System.Windows.Forms.TreeNode item in this.tvRemark.Nodes[0].Nodes)
            {

                if (Convert.ToInt16(item.Tag) == remID[i])
                {
                    item.Checked = true;
                }
            }

        }

    }