我想对所有treeview的节点进行操作

时间:2013-12-11 07:46:21

标签: c# .net treeview

我在c#中有一个带有树视图的Windows应用程序。现在我要检查该树视图的所有节点,包括节点的节点。 我试过这段代码:

for (int i = 0; i < treevwaccess.Nodes.Count; i++)
{                
    formid = treevwaccess.Nodes[i].Name;
    access = treevwaccess.Nodes[i].Checked;
    user.updateaccesslevel(lblId.Text, formid, access);
}

但此代码仅检查级别0中的节点

3 个答案:

答案 0 :(得分:0)

你必须使用Stack或这样的递归方法:

DoStuff(treevwaccess.Nodes);

...

void DoStuff(TreeNodeCollection nodes)
{
    foreach(TreeNode node in nodes)
    {
        user.updateaccesslevel(lblId.Text, node.Name, node.Checked);
        DoStuff(node.Nodes);
    }
}

答案 1 :(得分:0)

你需要像这样创建和调用递归函数

static void main()
{
    var treevwaccess = new System.Windows.Forms.TreeView();
    CheckAll(treevwaccess.Nodes);
}

static void CheckAll(System.Windows.Forms.TreeNodeCollection nodes )
{
    foreach (System.Windows.Forms.TreeNode node in nodes)
    {
        var formid = node.Name;
        var access = node.Checked;
        user.updateaccesslevel(lblId.Text, formid, access);
        CheckAll(node.Nodes);
    }
}

答案 2 :(得分:0)

您还必须检查根节点的子节点。

为此请尝试此代码。

for (int i = 0; i < treevwaccess.Nodes.Count; i++)
{ 
      formid = treevwaccess.Nodes[i].Name;
      access = treevwaccess.Nodes[i].Checked;
      user.updateaccesslevel(lblId.Text, formid, access);
      CheckChildNodes(treevwaccess.Nodes[i]);
}

void CheckChildNodes(TreeNode node)
{
      if (node.Nodes.Count > 0)
      {
          for (int i = 0; i < node.Nodes.Count; i++)
          {
              formid = node.Nodes[i].Name;
              access = node.Nodes[i].Checked;
              user.updateaccesslevel(lblId.Text, formid, access);
          }
       }
}

这会对你有帮助。