Vb.net 如何退出递归循环退出

Vb.net 如何退出递归循环退出,vb.net,recursion,Vb.net,Recursion,如何从下面的代码中退出递归循环。在退出循环之前,我想通知最终用户在msgBox中选择一个复选框。谢谢 Private Sub PrintRecursive(ByVal n As TreeNode) System.Diagnostics.Debug.WriteLine(n.Text) If (n.Checked = True) Then MessageBox.Show(n.Checked) Else If (n.Checked = Fals

如何从下面的代码中退出递归循环。在退出循环之前,我想通知最终用户在msgBox中选择一个复选框。谢谢

Private Sub PrintRecursive(ByVal n As TreeNode)
    System.Diagnostics.Debug.WriteLine(n.Text)

    If (n.Checked = True) Then
        MessageBox.Show(n.Checked)
    Else
        If (n.Checked = False) Then
            MessageBox.Show("Check a bex")
        End If
        End If


        ' MessageBox.Show(n.Checked)
        Dim aNode As TreeNode
        For Each aNode In n.Nodes
            PrintRecursive(aNode)
        Next
End Sub

' Call the procedure using the top nodes of the treeview.
Private Sub CallRecursive(ByVal aTreeView As TreeView)
    Dim n As TreeNode
    For Each n In aTreeView.Nodes
        PrintRecursive(n)
    Next
End Sub

一种方法是将PrintRecursive更改为返回布尔值的函数,true表示“停止”

然后更改递归调用以检查返回值

For Each aNode In n.Nodes
    if not PrintRecursive(aNode) then 
        msgbox("Notify User")
        return false
    end if
Next
不过,警告一句,退出递归时,messagebox将在嵌套的每个级别显示。为了避免这种情况,您可以将嵌套级别的参数添加到PrintRecursive,这样您就可以知道何时处于顶层

Private Function PrintRecursive(ByVal n As TreeNode, optional byval NestLevel as Integer=0) as Boolean
...
    For Each aNode In n.Nodes
        if not PrintRecursive(aNode,NestLevel+1) then 
            if (NestLevel=0) then msgbox("Notify User")
            return false
        end if
    Next
....

一种方法是将PrintRecursive更改为返回布尔值的函数,true表示“停止”

然后更改递归调用以检查返回值

For Each aNode In n.Nodes
    if not PrintRecursive(aNode) then 
        msgbox("Notify User")
        return false
    end if
Next
不过,警告一句,退出递归时,messagebox将在嵌套的每个级别显示。为了避免这种情况,您可以将嵌套级别的参数添加到PrintRecursive,这样您就可以知道何时处于顶层

Private Function PrintRecursive(ByVal n As TreeNode, optional byval NestLevel as Integer=0) as Boolean
...
    For Each aNode In n.Nodes
        if not PrintRecursive(aNode,NestLevel+1) then 
            if (NestLevel=0) then msgbox("Notify User")
            return false
        end if
    Next
....

顺便说一句:这只是一个温和的提醒,对于那些花时间试图帮助你接受你问题答案的人来说,这是一种应有的礼貌。谢谢约翰,我对这个网站很陌生。感谢您花时间帮助我编写代码。顺便说一句:这是对那些花时间尝试帮助您接受某个问题答案的人的一种应有的礼貌。谢谢John,我是这个网站的新手。感谢您花时间帮助我编写代码。嗨,John,我尝试了几次这段代码,但是我的编译器告诉我表达式不返回值。还有什么我应该调查的吗?另外,您认为使用这种类型的方法是循环遍历树节点中选择的所有节点的最佳方法吗?谢谢。这只是一个方法的例子,但无论如何,我对代码做了一些调整。另外,您是否将该方法更改为函数?嗨,John,再次感谢您提供的编码支持以及关于如何在本网站上成为更好的用户的提示。实际上,我将子过程切换到了一个函数,仍然遇到了一些问题,但似乎我并没有陷入递归循环。这个周末我的工作很适合我。再次感谢。顺便说一句。我看了一下你的网站。你在那里发布了一些非常好的东西。嗨,John,我尝试了几次这段代码,但是我的编译器在部分告诉我表达式不返回值。还有什么我应该调查的吗?另外,您认为使用这种类型的方法是循环遍历树节点中选择的所有节点的最佳方法吗?谢谢。这只是一个方法的例子,但无论如何,我对代码做了一些调整。另外,您是否将该方法更改为函数?嗨,John,再次感谢您提供的编码支持以及关于如何在本网站上成为更好的用户的提示。实际上,我将子过程切换到了一个函数,仍然遇到了一些问题,但似乎我并没有陷入递归循环。这个周末我的工作很适合我。再次感谢。顺便说一句。我看了一下你的网站。你有一些非常好的东西贴在那里。