【问题标题】:How to search multiple treeview nodes at a particular depth如何在特定深度搜索多个树视图节点
【发布时间】:2015-04-22 18:42:09
【问题描述】:

请问有人知道如何通过单击按钮在特定深度搜索多个树视图节点的文本吗?树视图节点排列如下:

我想防止用户在树形视图中输入相同标题的重复孙节点,即第二次输入“电影 2”应该会弹出一条消息,指出电影 2 已经输入;如果没有,则添加新的电影标题。

孙节点标题从文本框输入到树视图中。我正在使用 Visual Basic 2010 Express。提前谢谢你。

我使用的代码是:

Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click
        

'New movie title has been introduced into the study
        Dim SelectedNode As TreeNode
        SelectedNode = TreeView1.SelectedNode

        'To avoid entering duplicate movies title
        Dim NewMovieName As String = TextBox1.Text.Trim.ToLower ' The content of that node
        Dim parentNode = SelectedNode.Parent ' Get the parent
        Dim childNodes As TreeNodeCollection = parentNode.Nodes ' Get all the children 
        Dim WeHaveDuplicate As Boolean = False ' We use this to flag if a duplicate is found.  Initially set to false.

        For Each tempNode As TreeNode In childNodes
            'Test that we have the same name but not referring to the same node
            If tempNode.Text.Trim.ToLower = NewMovieName And tempNode IsNot parentNode Then WeHaveDuplicate = True
        Next

        If WeHaveDuplicate = True Then
            'Send message to user
            MsgBox(TextBox1.Text & " as a parameter has already been considered.", vbOKOnly)
            Exit Sub
        Else
            parentNode.Nodes.Add(TextBox1.Text)
            TreeView1.ExpandAll()
        End If
        Exit Sub

    End Sub

所有帮助将不胜感激。谢谢。

【问题讨论】:

  • @TheBlueDog 非常感谢您的好心 cmets。我期待您的明智建议。

标签: vb.net treeview


【解决方案1】:

这是我经常使用的一个小sn-p。它会通过它的文本找到一个节点。它还将突出显示并展开找到的节点。

注意它是递归的,所以它会搜索到提供的节点集合(参数)的底部。如果这个提供的集合是根节点,那么它将搜索整个树。

我通常对 node.tag 属性应用一个唯一的字符串。如果你调整函数来查找它,你可以显示重复的文本,同时仍然有一个唯一的字符串要查找...

''' <summary>
''' Find and Expand Node in Tree View
''' </summary>
Private Function FindNode(ByVal SearchText As String, ByVal NodesToSearch As TreeNodeCollection, ByVal TreeToSearch As TreeView) As TreeNode
    Dim ReturnNode As TreeNode = Nothing
    Try
        For Each Node As TreeNode In NodesToSearch
            If String.Compare(Node.Text, SearchText, True) = 0 Then
                TreeToSearch.SelectedNode = Node
                Node.Expand()
                ReturnNode = Node
                Exit For
            End If
            If ReturnNode Is Nothing Then ReturnNode = FindNode(SearchText, Node.Nodes, TreeToSearch)
        Next
    Catch ex As Exception
        Throw
    End Try
    Return ReturnNode
End Function

已编辑:
根据您最近的评论,
您可以尝试这样使用它...

WeHaveDuplicate = (FindNode("Movie 2", TreeView1.Nodes, TreeView1) Is Nothing)
If WeHaveDuplicate = True Then
  'message user of dupe
Else
  'add movie
End If

【讨论】:

  • @JSevens - 谢谢你的建议。不幸的是,我仍然遇到这个问题的问题,因为我仍然无法让它完成我之前解释的操作。我是 vb.net 的新手。
  • 再次感谢您的建议。除了您的第一个建议外,您的第二个代码对我有用。
猜你喜欢
  • 2012-04-01
  • 2017-09-07
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多