Foxtable(狐表)用户栏目专家坐堂 → [求助] Do ...Loop语句


  共有3710人关注过本帖树形打印复制链接

主题:[求助] Do ...Loop语句

帅哥哟,离线,有人找我吗?
东坡一剑
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
[求助] Do ...Loop语句  发帖心情 Post By:2013/6/27 22:09:00 [只看该作者]

我在学习《递归函数使用实例》一节时,下面的代码有个地方始终想不通,看看各位高手能不能帮忙指点一下

 

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim
key As String = e.Node.Name
Dim
ids As String
If
key = "全部" Then
    Tables(
"A").Filter = ""
Else
    For Each
nd As WinForm.TreeNode In trv.AllNodes
        Dim
pd As WinForm.TreeNode = nd
        Do
            If
pd.Name = key Then
                If
ids > "" Then
                   
ids= ids &  ","
                End If
               
ids = ids & "'" & nd.name & "'" '此处不用 pd.Name 而用  nd.name  有什么玄机?
                Exit Do
            Else
               
pd = pd.ParentNode
                If
pd Is Nothing Then
                    Exit Do
                End If
            End If
        Loop
    Next
   
Tables("表A").Filter = "键 In (" & ids & ")"
End If

 

按我的理解

 ids = ids & "'" & nd.name & "'"

只有当

pd.Name = key  时

才会执行

而每次双击的节点只有一个

因此加进 ids 字符串的节点名称只会有一个,也就是说 ids 始终只有一个节点名称的长度

所以Table的Filter 永远只能筛查一行

 

我知道自己的理解错了,但不知错在哪里,请高手指点。

是不是对 Do Loop 语句的理解有误?

如果是这样,错在哪里?

这方面的知识又该怎么补学?

 

[此贴子已经被作者于2013-6-27 22:18:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/28 8:53:00 [只看该作者]

 For Each nd As WinForm.TreeNode In trv.AllNodes
        Dim 
pd As WinForm.TreeNode = nd
        Do
            If 
pd.Name = key Then
                If 
ids > "" Then
                    
idsids &  ","
                End If
                
ids = ids & "'" & nd.name & "'" '此处当然要用  nd.name  你要添加的是当前节点,  而pd很有可能是父节点,因为如果IF条件不成立执行到ELSE就会为PD赋值为父节点
                Exit Do
            Else
                
pd = pd.ParentNode
                If 
pd Is Nothing Then
                    Exit Do
                End If
            End If
        Loop
    Next

其实就是循环所有节点,判断这个节点是否等于KEY 如果不等于就看看他父亲是否等于KEY 依然不是,继续循环 也就是DO LOOP 找光他祖宗十八代看看有人 等于  KEY的没. 如果有 都加到IDS里面来  从而就得到当前节点的的所有子节点了.

 回到顶部