2016-11-07 8 views
2

与えられた文字列を持つすべての既存ノードを検索できるようにするWinFormツリービュー(プロパティ名は "tvwAcct" txtName.Text ")、既に存在する場合は、重複エントリを停止するためのメッセージボックス警告をユーザーに与えます。すべての親ノードと子ノードを検索できる必要があります。次のように私の現在のツリー構造は、次のとおりです。すべてのノード(子ノードを含む)を検索する方法

銀行口座名

- >サブアカウント名1

- >サブアカウント名2

- >サブアカウント名3

私はMSDN.Microsoftを見てきたと見ることができるNodes.Findメトdが存在する。

はここに私のコードです:タイプのTreeNode()の

値が 'ブール' に変換することはできません。このコードの

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 

、私が言うエラーメッセージが表示されます。

ノードのテキスト値を取得し、これらを配列リストに入れ、代わりに配列リストを照会するなど、これがうまくいかない場合は、別の方法でこれを行うことができます。しかし、私はこれを行う方法を知るのに十分な経験はありません。

誰かが間違っていたことを知っていますか?または、より良いソリューションを提供できますか?

答えて

3

TreeView.Nodes.Find関数は、真偽値ではなくノードの配列を返します。

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

ありがとうございます!私は今、大きなエラーメッセージを何も与えられていない。しかし、テスト中に「完了」ボタンをクリックすると、この修正にもかかわらず、重複したノードが追加されてツリービューに保存されます。私の論理は正しいですか? – 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 
関連する問題