2016-11-08 58 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) 
相关问题