【问题标题】:How to search the text of child nodes within a parent node in a Treeview control in vb.net如何在 vb.net 的 Treeview 控件的父节点中搜索子节点的文本
【发布时间】:2015-06-19 02:30:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • 添加您编写的代码并重新格式化您的问题,以便更清楚地了解您的期望与解决方案中实际输出的内容。
  • 您好史蒂夫,如果我在原始帖子中不够清楚,我很抱歉,因为我相信您能够帮助我解决我的问题。与此同时,ChicagoMike 帮助我解决了这个问题。感谢您的 cmets。
  • @Iki - 下次请添加您的代码。
  • @Enigmativity 你好,我的朋友。请原谅我的系统错误。与此同时,我有一个新问题,希望你能帮助我。您能否检查我的个人资料并查看我的最新问题?谢谢。

标签: vb.net treeview


【解决方案1】:

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

可能是这样的:

    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;

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

【讨论】:

  • @ChicagoMike:谢谢你的回复。非常感谢您的建议并且非常有用。但是,如果要问的不多,如果我在将文本框文本(馈入节点)添加到 Treeview 之前检查文本框文本(输入节点),你会如何建议我重新考虑你的想法?再次感谢。
  • 我会试试 - 你知道你要添加文本到哪个节点吗?换句话说,用户是否至少选择了他们要将文本添加到的节点?
  • @ChicgoMike:谢谢你回复我。是的,请假设用户已经选择了他们想要添加新子节点的父节点,其文本来自文本框。因此,代码的任务是检查是否已在所选父节点下创建/添加了具有相同文本的节点。如果为真,则代码向用户发送消息,并且不添加新的子节点。但如果是假的;然后将文本来自文本框的新子节点添加到父节点。感谢您花时间帮助我。非常感谢您的帮助。
  • @ChicagoMike:非常感谢您的帮助!通过研究您最有价值的见解和我的一点想法,我已经能够解决问题。你是救生员。如果没有您的帮助,我将无法快速解决这个问题。我最终所做的是通过声明一个变量来表示所选节点,就像您在更新中建议的那样;然后几乎遵循您的更新;即 Dim SelectedTreeNode As TreeNode = Treeview1。 SelectedNode Dim currentNode As TreeNode = SelectedTreeNode.Nodes.Add(TextBox8.Text) ...等再次感谢。
  • 非常感谢您的帮助!通过研究您最有价值的见解和我的一点想法,我已经能够解决问题。你是救生员。如果没有您的帮助,我将无法快速解决这个问题。我最终所做的是通过声明一个变量来表示所选节点,就像您在更新中建议的那样;然后几乎遵循您的更新;即 Dim SelectedTreeNode As TreeNode = Treeview1。 SelectedNode Dim currentNode As TreeNode = SelectedTreeNode.Nodes.Add(TextBox8.Text) ...等再次感谢。
猜你喜欢
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 2011-08-06
相关资源
最近更新 更多