2016-06-06 6 views
0

ich diesen Code versucht haben:Prüfung Eltern, wenn alle seine Knoten überprüft und alle Knoten überprüfen, wenn ihre Eltern überprüft wirft Fehler

Private Sub TreeView1_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck 
     Dim blnUncheck As Boolean = False 
     Dim tn As TreeNode 
     If e.Node.Nodes.Count = 0 Then 
      For Each child As TreeNode In e.Node.Parent.Nodes 
       If child.Checked = False Then 
        blnUncheck = True 
       End If 
      Next 
      If blnUncheck = False Then 
       e.Node.Parent.Checked = True 
      Else 
       e.Node.Parent.Checked = False 
      End If (the code above is used to check parent when nodes are checked) 
      Else (the code below is used to check nodes of parent when parent is checked) 
       If e.Node.Checked = True Then 
         For Each tn In e.Node.Nodes 
          tn.Checked = True 
         Next 
        Else 
         For Each tn In e.Node.Nodes 
          tn.Checked = False 
         Next 
        End If 
     End If 
    End Sub 

um: a) Prüfung alle Knoten, wenn ihre Eltern überprüft b) Prüfung Eltern, wenn alle es der Knoten

geprüft Obwohl, wenn, wenn ich einen von zwei entfernen (a, b) aus dem Code funktioniert es

Wenn ich sie kombiniere (wie der Code, den ich geschrieben habe), wird eine stackoverflow-Ausnahme ausgelöst. Der Code wird in der Baumansicht mit Kontrollkästchen verwendet.

EDIT: behobenes Besuchen Sie diesen Link TreeView.BeforeCheck Event um Hilfe (sorgfältig lesen)

Antwort

2

Wenn Sie durch den Code versuchen, Schritt werden Sie sehen, dass Sie jedes Mal versuchen, und aktivieren/deaktivieren Sie einen Knoten, Sie Geben Sie das Ereignis erneut ein.

Versuchen das Hinzufügen dieser Kontrolle:

If e.Action = TreeViewAction.Unknown Then 
    Exit Sub 
End If 

Wenn Sie manuell geklickt haben (EDIT: Funktioniert auch durch Tastendruck zur Auswahl) der Knoten es das Ereignis verlassen wird und stoppen Sie die Endlosschleife

+1

Mit ein bisschen Bearbeitung funktionierte es! Ich referenziere diesen Link [TreeView.BeforeCheck Event] (https://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beforecheck%28v=vs.110%29.aspx?cs-save -lang = 1 & cs-lang = vb # Code-Snippet-2) für Leute, die es in Zukunft brauchen könnten – Technologuy

+1

Gute Sachen! Dieser Link ist wirklich nützlich! –

0

Ich glaube, Sie suchen Sie das können Sie versuchen ....

Private Sub CheckAllChildNodes(treeNode As TreeNode, nodeChecked As Boolean) 
    Dim node As TreeNode 
    For Each node In treeNode.Nodes 
     node.Checked = nodeChecked 
     If node.Nodes.Count > 0 Then 
      Me.CheckAllChildNodes(node, nodeChecked) 
     End If 
    Next node 
End Sub 


Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck 
    If e.Action <> TreeViewAction.Unknown Then 
     If e.Node.Nodes.Count > 0 Then 
      Me.CheckAllChildNodes(e.Node, e.Node.Checked) 
     Else 
      e.Node.Parent.Checked = True 
     End If 
    End If 
End Sub 
Verwandte Themen