检查Visual Basic中父节点下的所有项目

时间:2010-06-25 15:06:43

标签: vb.net tree

我正在尝试检查父节点下的所有子节点,到目前为止,我在TreeView中只有大约2-3级深度的代码,我希望抓住所有节点,无论它们有多深。有人可以对此有所了解。

以下是代码:

Private Sub CheckChildNode(ByVal currNode As TreeNode)
    'set the children check status to the same as the current node
    Dim checkStatus As Boolean = currNode.Checked
    For Each node As TreeNode In currNode.Nodes
        node.Checked = checkStatus
        CheckChildNode(node)
    Next
End Sub

Private Sub CheckParentNode(ByVal currNode As TreeNode)
    Dim parentNode As TreeNode = currNode.Parent
    If parentNode Is Nothing Then Exit Sub
    parentNode.Checked = True
    For Each node As TreeNode In parentNode.Nodes
        If Not node.Checked Then
            parentNode.Checked = False
            Exit For
        End If
    Next
    CheckParentNode(parentNode)
End Sub

Private Sub treeview_AfterCheck(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.TreeViewEventArgs) Handles treeview.AfterCheck
RemoveHandler treeview.AfterCheck, AddressOf treeview_AfterCheck
    CheckChildNode(e.Node)
    CheckParentNode(e.Node)
    AddHandler treeview.AfterCheck, AddressOf treeview_AfterCheck
End Sub

1 个答案:

答案 0 :(得分:0)

为了获得所有子节点,不管它们有多深,你肯定需要递归。

也就是说,您获取节点的每个直接子节点并检查此节点。并且您还调用该方法来检查每个孩子的子节点。

所以这里是Pseudocode。

node getParentNode(node child){
 return child.parent
}

node checkNode(node n){
 // perform check here for node n
 if n is not valid {
  return false!
 }
 // do children recursively
 for each child in n.children{
  // function calls itself!
  checkNode(child)
 }
}

Here是vb.net的递归教程。 Hereherehere可以找到更多信息。