2017-01-25 5 views
0

노드가 선택된 경우에만 버튼을 클릭 한 후 함수를 호출하려고합니다. foreach 루프는 루트 노드 만 반복하여 모든 자식을 피합니다. 버튼 클릭 기능 내에서 이것을 호출해야합니다. 그래서 두 가지 대답 (별도의 함수 작성 및 button_click 함수 호출 또는 button_click 함수 직접 쓰기)이 있으면 좋을 것입니다. ReadData 함수가 정상적으로 실행 중입니다. 유일한 문제는 모든 노드의 반복입니다.모든 자식으로 트리를 반복 할 수 없습니다. C#

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 t = new Form2();   
    TreeNodeCollection node = this.treeView1.Nodes; 
    foreach(TreeNode tn in node) 
    { 
     if(tn.IsSelected) 
     { 
      //This is the function I need to call from form2. 
      t.ReadData(null); 
     } 
    } 
    t.Show(); 
} 
+1

있습니까? –

+0

[TreeView.Nodes 속성] (https://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.nodes (v = vs.110) .aspx) "Nodes 속성은 컬렉션을 보유합니다 TreeNode 객체 중 각각은 자신의 TreeNodeCollection을 포함 할 수있는 Nodes 속성을 가지고 있습니다. " –

답변

1

당신은 반복 재귀를 사용한다 :

private void ReadRecurcive(TreeNodeCollection nodes, Form form) 
{ 
    foreach (TreeNode tn in nodes) 
    { 
     if(tn.IsSelected) 
     { 
      //This is the function you need to call from form2. 
      form.ReadData(null); 
     } 

     ReadRecurcive(tn.Nodes, form); 
    } 
} 

그리고 핸들러 다음`SelectedNode` 속성을 사용하지 않는 이유가

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 t = new Form2();   
    TreeNodeCollection node = this.treeView1.Nodes; 

    ReadRecurcive(node, t); 

    t.Show(); 
}