TREEVIEW遍历的怪问题

岁月明灯 2017-03-30 12:30:11
用了网上的树结构遍历代码,做了部分修改:
//============函数名:f_tree_browse_resursive
参数一:tv_1 treeview类型
参数二:in_tvnode long类型
返回值:None
==============================================
Integer li_Ret
Long ll_tvTmp
long ll_tvCurrent
long ll_tvRoot
TreeViewItem l_tv_item

ll_tvRoot=tv_1.FindItem(RootTreeItem!,0)

ll_tvCurrent = in_tvNode
li_Ret = tv_1.GetItem(ll_tvCurrent,l_tv_item)
If li_Ret = -1 Then
MessageBox("信息","树的遍历结束!") //遍历结束
Return
Else
//处理选中项目
if l_tv_item.StatePictureIndex = 2 then
MessageBox("信息","当前选中的遍历项为:" + l_tv_item.Label + "data为:" + string(l_tv_item.data))
end if
End If


IF l_tv_item.Children = True Then
ll_tvTmp=tv_1.FindItem(ChildTreeItem!,ll_tvCurrent) //当前项存在叶子,遍历其叶子
f_tree_browse_resursive(tv_1,ll_tvTmp)
Else
ll_tvTmp=tv_1.FindItem(NextTreeItem!,ll_tvCurrent) //当前项没有叶子,取得其下一项
If ll_tvTmp <> -1 Then
f_tree_browse_resursive(tv_1,ll_tvTmp) //下一项存在,遍历其下一项
else
Do While True //下一项不存在,查找其父项的下一项
ll_tvCurrent=tv_1.FindItem(ParentTreeItem!,ll_tvCurrent)
ll_tvTmp=tv_1.FindItem(NextTreeItem!,ll_tvCurrent)
If ll_tvTmp <> -1 Then Exit //找到了父项的下一项
If ll_tvCurrent = ll_tvRoot And ll_tvTmp=-1 Then Exit //找到树根
Loop
f_tree_browse_resursive(tv_1,ll_tvTmp) //遍历其查找其父项
end If
End If

====发现在遍历到最后时,代码进入Do While True.....loop死循环,求问题原因!
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
岁月明灯 2017-03-30
  • 打赏
  • 举报
回复
虽然最后找到问题,与您的建议没什么关系,但还是表示非常的感谢!
WorldMobile 2017-03-30
  • 打赏
  • 举报
回复
代码有问题了,看看这么修改



/*============函数名:f_tree_browse_resursive
参数一:tv_1 treeview类型
参数二:in_tvnode long类型
返回值:None
==============================================*/
Integer li_Ret
Long ll_tvTmp
long ll_tvCurrent
long ll_tvRoot
TreeViewItem l_tv_item

ll_tvRoot = tv_1.FindItem(RootTreeItem!, 0)

ll_tvCurrent = in_tvNode
li_Ret = tv_1.GetItem(ll_tvCurrent, l_tv_item)
If li_Ret = -1 Then
MessageBox("信息", "树的遍历结束!") //遍历结束
Return
Else
//处理选中项目
if l_tv_item.StatePictureIndex = 2 then
MessageBox("信息","当前选中的遍历项为:" + l_tv_item.Label + "data为:" + string(l_tv_item.data))
end if
End If


IF l_tv_item.Children = True Then
ll_tvTmp = tv_1.FindItem(ChildTreeItem!, ll_tvCurrent) //当前项存在叶子,遍历其叶子
f_tree_browse_resursive(tv_1, ll_tvTmp)
Else
ll_tvTmp = tv_1.FindItem(NextTreeItem!,ll_tvCurrent) //当前项没有叶子,取得其下一项
If ll_tvTmp <> -1 Then
f_tree_browse_resursive(tv_1,ll_tvTmp) //下一项存在,遍历其下一项
else
//这个地方调整一下
ll_tvCurrent = tv_1.FindItem(ParentTreeItem!, ll_tvCurrent)
Do While True //下一项不存在,查找其父项的下一项
ll_tvTmp = tv_1.FindItem(NextTreeItem!, ll_tvCurrent)
If ll_tvTmp <> -1 Then Exit //找到了父项的下一项
If ll_tvCurrent = ll_tvRoot And ll_tvTmp=-1 Then Exit //找到树根
Loop
//f_tree_browse_resursive(tv_1, ll_tvTmp) //遍历其查找其父项
end If
End If

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧