如何搜索所有节点(包括子节点)

时间:2016-11-07 14:16:39

标签: vb.net winforms treeview

我有一个WinForm树视图(属性名为“ tvwAcct ”),我希望能够使用给定的字符串搜索所有现有节点(“ txtName.Text “),如果它已经存在,则给用户一个消息框警告以停止重复的条目。它需要能够搜索所有父节点以及子节点。我目前的树结构如下:

  

银行帐户名称

     

- >子帐户名称1

     

- >子帐户名称2

     

- >子帐户名称3

我查看了MSDN.Microsoft,可以看到 Nodes.Find 方法存在。

这是我的代码:

Private Sub txtName_Validating(eventSender As Object, eventArgs As CancelEventArgs) Handles txtName.Validating
    Dim Cancel As Boolean = eventArgs.Cancel
    Dim b As Boolean = True

    ' [ other 'if' conditions here ]

    ElseIf (tvwAcct.Nodes.Find(txtName.Text, b) Then
        MyMsgBox("Sorry, this account name already exists. Please try again with a different name.", MsgBoxStyle.Information)
        Cancel = True

使用此代码,我收到一条错误消息:

  

TreeNode()类型的值无法转换为“Boolean”。

如果不能正常工作,我会接受另一种方法,比如获取节点文本值,然后将它们放入数组列表并查询数组列表。但我没有足够的经验知道如何做到这一点。

有谁知道我哪里出错了吗?或者可以提供更好的解决方案?

2 个答案:

答案 0 :(得分:3)

TreeView.Nodes.Find函数返回一个节点数组,而不是真/假值。

试试这样:

ElseIf tvwAcct.Nodes.Find(txtName.Text, b).Length > 0 Then

答案 1 :(得分:1)

Find方法,按节点键搜索而不是文本。因此,如果您需要按文本搜索节点,则需要实现自己的方法。我更喜欢使用LINQ来完成这些任务,但它可能不是最佳解决方案:

Dim treeNodes = tvwAcct.Nodes.Cast(Of TreeNode).Where(Function(x) x.Text = txtName.Text).ToArray


If treeNodes.Length > 0 Then
     MessageBox.Show("Sorry, this account name already exists. Please try again with a different name.")
     Cancel = True
End If