【问题标题】:Checkbox checked state of child node子节点的复选框选中状态
【发布时间】:2015-05-02 11:40:53
【问题描述】:

我正在使用 VS 2005 (.NET 2.0) C# 处理具有 XML 解析到 TreeView 功能的 Winform。

我打算启用树视图列表的复选框。实际上,我已经启用了它们。我在寻找可能有帮助的 TreeView 和 TreeNode 的一些属性时发现了这段代码here。我找到了 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");
}

所以我在我的测试项目上尝试了它,它只在父节点上有效,在子节点上无效。我想要做和发生的是我还必须确定子节点的检查状态。我正在开发一个需要选择单个到多个子节点并在检查后执行外部程序的项目。对于子节点,这可能吗?或者有没有其他选择。

如果我有任何不清楚的地方,请告诉我。提前谢谢你。

【问题讨论】:

  • 使用foreach (TreeNode myNode in myTreeView.Nodes[0].Nodes) 你只需要顶级节点。如果您需要下一个级别,请在每次迭代中使用 myNode.Nodes
  • 这个对节点的层级有限制吗?

标签: c# winforms checkbox treeview


【解决方案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
           }
         */ 
       }
  }

解释:

给定的示例将更改以下结构的文本(已选中的文本应用于子项)

  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

【讨论】:

  • 我确实使用了 MSDN 中的示例代码来查看它是如何工作的,也许我可以从中得到一些想法。但我没有。我认为代码缺少或与我想要的完全不同。谢谢。我会注意的,我会试试的。
  • @Kurisuchin 没关系.. 学习很难,但是一旦你学会了它们就会变得容易 :) 尝试建议并将答案标记为正确,如果它解决了问题 :)
  • 这确实帮助我理解了,所以我想这确实解决了问题。我必须进一步深入了解这一点并在我当前的项目中实施。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多