C# 我想对所有的树视图进行操作';s节点

C# 我想对所有的树视图进行操作';s节点,c#,.net,treeview,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

我在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);
}
for(int i=0;i

但此代码仅检查级别0中的节点,您必须使用
堆栈或类似以下的递归方法:

DoStuff(treevwaccess.Nodes);

...

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

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

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

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

为此,请尝试此代码

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);
          }
       }
}
for(int i=0;i0)
{
对于(int i=0;i
这对你有帮助