我在我的表單中啓用了複選框。我需要添加任何檢查到列表,所以我可以寫出列表。如果我檢查任何父節點(或最高級別的節點),它包括它們。如果我選擇任何父節點,它也會選擇其子節點(這是故意的),並顯示這些節點。但是,如果我只檢查任何子節點,它不會將它們添加到我的列表中。爲什麼沒有選擇父節點時我的子節點沒有被檢測到?
//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個父節點,發生(認爲這是正確的術語)的遞歸導致它找到第一個檢查點,然後重新開始,並補充說,同樣的檢查節點第二次擊中第二組節點之前。
我提供了我的節點測試,希望它足以確定爲什麼它沒有檢測到未選擇父節點時選擇的子節點。
更新 - 13年3月18日 我按一下按鈕代碼:
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();
}
我沒有看到遞歸這裏,除非GetExtendedFeatures其實是你展示方法的代碼。對於您當前的代碼,它只能通過檢查父母的子節點循環。你必須遍歷所有節點,看看它們是否被選中,然後添加到列表中。 – echavez 2013-03-03 20:13:34