设置选中treeView复选框

时间:2015-04-20 05:42:51

标签: c# winforms checkbox treeview

我有一个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;
                }
            }

        }

    }

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

3 个答案:

答案 0 :(得分:1)

如果只有一个根节点有多个子节点(只有一个级别),那么这里你不需要递归。只需在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;
            }
        }
    }
}

答案 1 :(得分:0)

做这样的事情:

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);
            }
        }
    }

并调用re-cursive 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);
        }
    }

答案 2 :(得分:0)

有了你的帮助我就解决了我的问题。

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

        }

    }