2016-11-07 3 views
2

У меня есть вид дерева WinForm (свойство называется «tvwAcct»), где я хотел бы иметь возможность искать все существующие узлы с заданной строкой (" txtName.Text "), и если он уже существует, чтобы дать пользователю предупреждение о предупреждении для дублирования записей. Он должен иметь возможность искать все родительские узлы, а также дочерние узлы. Моя текущая структура дерева выглядит следующим образом:Как выполнить поиск по всем узлам (включая дочерние узлы)

имя Банковский счет

-> Субсчет имя 1

-> Субсчет имя 2

- имя> Субсчет 3

Я посмотрел на MSDN.Microsoft и можно увидеть, что Nodes.Find мето d существует.

Вот мой код:

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'.

Я был бы открыт для другого способа сделать это, если это не сработает, например, получить текстовые значения узла, а затем помещать их в список массивов и запрашивать список массивов. Но я недостаточно опытен, чтобы знать, как это сделать.

Кто-нибудь знает, где я ошибся, пожалуйста? Или может обеспечить лучшее решение?

ответ

3

Функция TreeView.Nodes.Find возвращает массив узлов, а не значение true/false.

Попробуйте так:

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

Спасибо за это! Мне теперь не дают сообщений об ошибках, которые замечательны. Однако во время тестирования, когда я нажимаю кнопку «Готово», дублирующие узлы все еще добавляются и сохраняются в TreeView, несмотря на это исправление. Правильно ли моя логика? – greenTree

+0

@Pepsi_Max Вы не указали достаточно своего кода. Необходимо запретить добавление узла в TreeView. – LarsTech

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 
Смежные вопросы