2015-03-02 2 views
0

Я использую VS 2005 (.NET 2.0) C#, работающий над Winform с функциональностью синтаксического анализа XML в TreeView.Checkbox проверено состояние дочернего узла

Я планирую включить флажки в списке древовидной структуры. На самом деле, я уже включил их. Я нашел этот код 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"); 
} 

Так что я попробовал это в своем тестовом проекте, и он работал только на родительских узлах, а не на дочерних узлах. То, что я хочу сделать и что произойдет, это то, что я должен также определить проверенное состояние дочерних узлов. Я работаю над проектом, который требует выбора одного или нескольких дочерних узлов и выполнения внешней программы после проверки. Возможно ли это с детдомами? Или есть другие альтернативы.

Сообщите мне, если я не знаю ничего. Заранее спасибо.

+2

с 'Еогеасп (TreeNode MyNode в myTreeView.Nodes [0] .Nodes)' вы только узлы верхнего уровня. если вам нужен следующий уровень, возьмите также myNode.Nodes на каждой итерации – ASh

+0

Имеет ли это ограничение на уровне узлов? – Kurisuchin

ответ

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 
+0

Я использовал образец кода из MSDN, чтобы посмотреть, как он будет работать, и, возможно, я мог бы получить от него какую-то идею. Но я этого не сделал. Я понял, что код отсутствует или просто отличается от того, что я хочу. Благодарю. Я обращу внимание на это, я попробую. – Kurisuchin

+0

@ Kurisuchin это прекрасно .. Учимся трудно, но как только вы узнаете их, они становятся легкими :) Попробуйте предложения и пометьте ответ как правильный, если он решит проблему :) –

+1

ну, это, безусловно, помогло мне понять, поэтому я думаю, что это решило проблема. Я должен копать дальше, чтобы понять это полностью и реализовать это в моем текущем проекте. – Kurisuchin

Смежные вопросы