复选框检查子节点的状态

时间:2015-03-02 07:12:04

标签: c# winforms checkbox treeview

我正在使用VS 2005(.NET 2.0)C#在Winform上工作,具有对TreeView进行XML解析的功能。

我打算启用树视图列表的复选框。实际上,我已经启用了它们。我找到了这段代码here,同时寻找可能有帮助的TreeView和TreeNode的一些属性。我找到了TreeNode.Checked属性和TreeView.CheckBoxes属性。

public void HighlightCheckedNodes()
{
   int countIndex = 0;
   string selectedNode = "Selected customer nodes are : ";
   foreach (TreeNode myNode in myTreeView.Nodes[0].Nodes)
   {
      // Check whether the tree node is checked.
      if(myNode.Checked)
      {
         // Set the node's backColor.
         myNode.BackColor = Color.Yellow;
         selectedNode += myNode.Text+" ";
         countIndex++;
      }
      else
         myNode.BackColor = Color.White;
   }

   if(countIndex > 0)
      MessageBox.Show(selectedNode);
   else
      MessageBox.Show("No nodes are selected");
}

所以我在我的测试项目上尝试了它,它只在父节点上工作,而不在子节点上工作。我想要做和将要发生的是我还必须确定子节点的已检查状态。我正在开发一个项目,需要选择单个到多个子节点,并在检查后执行一次外部程序。这可能与子节点有关吗?还是有其他选择。

如果我对任何事情都不清楚,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您需要将代码更改为以下内容(在我看来,您刚刚使用了MSDN中的代码)。给定代码提供您可以采用的示例答案。

   // Start from Root type node ; Loop them all
   foreach (TreeNode rootNodes in treeView1.Nodes)
   {
       // Sub note set of current  root
       foreach (TreeNode childs in rootNodes.Nodes)
       {
          childs.Text = "Checked";    // Testing for validity : First level of child

          /*
           * Needs to go further down if we have childs of childs
          foreach (TreeNode child_child in childs.Nodes)
          {
              child_child.Text = "Checked";  // Testing for validity : Second level of child
           }
         */ 
       }
  }

说明:

给定示例将更改以下结构的文本(文本Checked Applied to childs)

  ROOT
     |-> Child
     |-> Child
  ROOT
     |-> Child
     |-> Child

如果您取消评论最内层foreach,您可以将其应用于下面的结构((文本已选中适用于孩子))

  ROOT
     |-> Child
          |-> Child
          |-> Child
     |-> Child
  ROOT
     |-> Child
     |-> Child

在您的代码中,您不会进一步向下TreeNode并且您忘记了每个TreeNode都可以包含它自己的子节点集合。

简单地说,

    myTreeView.Nodes[0].Nodes // <- This is wrong for what you want