2016-11-08 27 views
1

我有一個使用VB.NET(屬性名爲「tvwAcct」)的WinForm樹形視圖,我希望能夠使用給定的字符串搜索所有現有節點(「txtName.Text」),如果它已經存在,給用戶一個消息框警告以停止重複的條目。它需要能夠搜索所有父節點和子節點。我的當前樹結構如下:通過Treeview.Nodes中的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 

    ' [ other 'if' conditions here ] 

    If tvwAcct.Nodes.Find(txtName.Text, b).Length > 0 Then 
    MyMsgBox("Sorry, this cost centre/bank account already exists.", MsgBoxStyle.Information) 
End If 

雖然使用了tvwAcct.Nodes的Watch功能財產調試,我可以看到這個代碼邏輯的作品,但似乎對「名稱」進行比較節點的屬性,而不是「文本」屬性。例如。如果我在我的「txtName」框中輸入了「NODE0000」行中的內容並嘗試離開,則錯誤消息將成功顯示並且驗證失敗。

所以,我知道它的工作原理,但它沒有看到正確的屬性。 有誰知道我可以如何強制它尋找文本而不是名稱?

+0

你不能強迫它做任何事情,而不是它被編程做的事情。但是,您可以分配TreeNode.Name屬性,以便Find()將變得有用。 –

+0

@HansPassant感謝你,這似乎是合理的。我不認爲你可以善意地將這個評論作爲潛在的答案來解釋嗎?我沒有足夠的經驗去理解你的想法。 – greenTree

+0

@HansPassant我的意思是說,你提到「你可以指定TreeNode.Name屬性,這樣Find()就會變得有用。」我不確定這意味着什麼,如何解釋或者對我有用。 – greenTree

回答

0

當您添加節點到您的TreeView時,確保設置節點的「名稱」以及文本。

tvwAcct.Nodes.Add(txtName.Text, txtName.Text)