我的表单中有一个启用了复选框的树列表。我需要将选中的任何内容添加到列表中,以便我可以写出该列表。如果我检查任何父节点(或最高级别节点),它包括它们。如果我选择任何父节点,它也会选择其子节点(这是有意的),并显示这些节点。但是如果我只检查任何子节点,它不会将它们添加到我的列表中。
//check to see if there are any nodes checked
bool nodeHasCheck = false;
foreach (TreeNode n in nodes)
{
if (n.Checked)
{
nodeHasCheck = true;
break;
}
GetExtendedFeatures(n.Nodes);
}
//only return stuff if something's checked
if (nodeHasCheck == true)
{
foreach (TreeNode n in nodes)
{
if (n.Checked)
{
//n.BackColor = Color.Black;
nodeList.Add(n.Text);
}
GetExtendedFeatures(n.Nodes);
}
似乎如果我选择 2 个父节点,则发生的递归(认为这是正确的术语)导致它找到第一个选中的节点,然后重新开始,并在第二个选中节点之前再次添加相同的选中节点节点集。
我提供了我的节点测试,希望它足以确定为什么它没有检测到在没有选择父节点的情况下选择的子节点。
更新 - 3/18/13 我的按钮点击代码:
private void btnGenerate_Click(object sender, EventArgs e)
{
ScanNodes(treeView1.Nodes[0]);
}
private void ScanNodes(TreeNode parent)
{
foreach (TreeNode node in parent.Nodes)
{
if (node.Checked)
{
nodeList.Add(node.Text.ToString());
}
if (node.Nodes.Count > 0)
{
ScanNodes(node);
}
}
var message = string.Join(Environment.NewLine, nodeList);
message = message.Replace(Environment.NewLine, ", ");
MessageBox.Show(message);
nodeList.Clear();
}