我正在使用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");
}
所以我在我的测试项目上尝试了它,它只在父节点上工作,而不在子节点上工作。我想要做和将要发生的是我还必须确定子节点的已检查状态。我正在开发一个项目,需要选择单个到多个子节点,并在检查后执行一次外部程序。这可能与子节点有关吗?还是有其他选择。
如果我对任何事情都不清楚,请告诉我。提前谢谢。
答案 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