读书人

高分求救一个有关TreeView树遍历的有关

发布时间: 2012-01-05 22:36:54 作者: rapoo

高分求救一个有关TreeView树遍历的问题,急啊!如题:
从一TreeView树中光标所在位置向下查找(整树查找,不是指在子树中查找),查找到包含指定查找内容的,该条结果记录标蓝显示。用户继续点击“查找下一处”,系统自动向下查找,直到整个目录树查找完毕,弹出对话框,提示用户“是否行业目录树初始位置开始查找”。用户点击确定事件,执行查找操作,从目录树首记录开始查询,查到包含指定内容的字段,整条记录标蓝显示,直到整个目录树末记录。弹出对话框,提示用户“搜索完毕”

[解决办法]
//参考如下代码

Private Function GetNextNode(ByVal ATreeNode) As TreeNode
If ATreeNode Is Nothing Then
Return Nothing
End If
If ATreeNode.Nodes.Count > 0 Then
Return ATreeNode.Nodes(0)
Else
While True
If ATreeNode.Parent Is Nothing Then
If ATreeNode.Index + 1 < ATreeNode.TreeView.Nodes.Count Then
Return ATreeNode.TreeView.Nodes(ATreeNode.Index + 1)
Else
Return Nothing
End If
Else
If ATreeNode.Index + 1 < ATreeNode.Parent.Nodes.Count Then
Return ATreeNode.Parent.Nodes(ATreeNode.Index + 1)
Else
ATreeNode = ATreeNode.Parent
End If
End If
End While
Return Nothing
End If
End Function
Private Sub FindNextNode(ByVal ATreeView As TreeView, ByVal AText As String)
If ATreeView Is Nothing Or ATreeView.Nodes.Count <= 0 Then
Return
End If
Dim vTreeNode As TreeNode = ATreeView.SelectedNode

If vTreeNode Is Nothing Then
vTreeNode = ATreeView.Nodes(0)
Else
vTreeNode = GetNextNode(vTreeNode)
End If
Dim vStartNode As TreeNode = vTreeNode
While Not vTreeNode Is Nothing
If vTreeNode.Text.IndexOf(AText) > = 0 Then
ATreeView.SelectedNode = vTreeNode
Return
End If
vTreeNode = GetNextNode(vTreeNode)
End While
ATreeView.SelectedNode = Nothing
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
FindNextNode(TreeView1, "节点 ")
TreeView1.HideSelection = False
If Not TreeView1.SelectedNode Is Nothing Then
If TreeView1.SelectedNode.IsVisible Then
TreeView1.SelectedNode.EnsureVisible()
End If
End If
End Sub

[解决办法]
lz 可以从路径下手 那样会比较简单
[解决办法]
考:

Private Sub DoFindNode(ByRef tmpTreeView As TreeView, ByRef tmpNds As TreeNodeCollection, ByVal tmpTableId As String)
Dim tmpTreeNode As TreeNode
For Each tmpTreeNode In tmpNds
If tmpTreeNode.Text.Trim = tmpTableId Then
tmpTreeView.SelectedNode = tmpTreeNode
tmpTreeView.SelectedNode.EnsureVisible()
Exit For
Else
Me.DoFindNode(tmpTreeView, tmpTreeNode.Nodes, tmpTableId)
End If
Next
End Sub
[解决办法]
递归:
Private Function findChild(ByVal node As TreeView, ByVal parId As String) As TreeNode

Try
Dim treenodecoll As System.Windows.Forms.TreeNodeCollection
Dim treenode As New System.Windows.Forms.TreeNode
Dim rtn As New TreeNode
treenodecoll = node.Nodes()
For Each treenode In treenodecoll
If treenode.Tag = parId Then


Return treenode
Else

rtn = findChild1(treenode, parId)

If Not rtn Is Nothing Then

Return rtn
End If

End If
Next
Catch ex As Exception
Throw ex
End Try
End Function

Private Function findChild1(ByVal node As TreeNode, ByVal parId As String) As TreeNode

Try

Dim treenode As New System.Windows.Forms.TreeNode
For Each treenode In node.Nodes
If treenode.Tag = parId Then
Return treenode
Else
findChild1(treenode, parId)
End If
Next
Catch ex As Exception
Throw ex
End Try
End Function
[解决办法]
仅供参考:

Public Function FindNodeByValue(ByVal str As String, ByVal NodesToSearch As TreeNodeCollection) As TreeNode

For Each CurrNode As TreeNode In NodesToSearch
CurrNode = CType(CurrNode, MyTreeNode)
If CurrNode.Text = str Then
Return CurrNode
Else
CurrNode = FindNodeByValue(str, CurrNode.Nodes)
End If
Next

End Function

读书人网 >VB Dotnet

热点推荐