如何在vb.net中的Treeview控件中搜索父节点内的子节点文本

时间:2015-04-13 17:10:43

标签: vb.net treeview

我有一个Treeview控件结构,我在运行时生成,它通过单击专用按钮将带有文本框的文本框的子节点添加到父节点。

现在,随着更多子节点被添加到特定父节点,我想通过单击按钮搜索该父节点中先前添加的子节点的名称(文本),以防止用户添加重复节点同名。

如果发生这种情况,用户应该收到一条消息,表明已经将具有相同名称的子节点添加到该特定父节点。我编写了一个代码来解决彼此相邻的子节点的问题,即如果用户将一个名为“Frank”的子节点添加到名为“Family”的父节点,然后尝试在病房后立即再次添加“Frank”,他/她将收到“Frank”已添加到“Family”父节点的消息。

我的问题是,如果用户添加“Frank”,然后添加“Shelly”,然后添加“Mark”,然后再添加“Frank”,他/她将不会收到消息。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您想要获取刚刚输入的子节点的父节点,从该父节点检索所有子节点,然后遍历子节点以查看是否有任何这些节点具有相同的名称。

它可能会是这样的:

    Dim currentNode As TreeNode = TreeView1.SelectedNode ' The node we just entered
    Dim targetName As String = TextBox1.Text.trim.toLower ' The string we're searching against - we trim and set to lower for comparison purposes

    Dim parentNode = currentNode.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
        If tempNode.Text.trim.toLower = targetName Then WeHaveDuplicate = True ' Test that we have the same name but not referring to the same node
    Next

    If WeHaveDuplicate= True Then 
       ' Send message to user
       ' Do not add new node to treeview 
    Else
       ' Add new node to treeview
    End If;

更新:我修改此代码以使用文本框文本而不是所选节点的当前值来确定是否存在匹配。