2016-10-31 6 views
0

ツリービューの親ノードに子ノードを追加しようとしています。私はノードのテキストに特定のキーloanresult.LoanNameでローン名を探しています。どちらも "TestOne"として表示されますが、子ノードは親ツリーノードに追加されていません。ツリービューノードテキストと指定されたキーが一致していますが一致しません

一致するものが見つからないため、一致するとエラーmatches[0].Nodes = 'matches[0].Nodes' threw an exception of type 'System.IndexOutOfRangeException'がスローされます。

foreach (string st in activityList) 
{ 
    var activityResult = JsonConvert.DeserializeObject<Activity>(st); 
    if (loanResult.LoanName == activityResult.ParentLoanName) 
    { 
     TreeNode[] matches = tvTodoList.Nodes.Find(loanResult.LoanName, false); 
     if (matches.Length > 0) matches[0].Nodes.Add(activityResult.ActivityName); 
    } 
} 

テキスト

enter image description here

キー

enter image description here

私はここで何かを明らかに不足してしなければなりませんか?代わりに、単一のパラメータのコンストラクタを使用して

+2

'Name'プロパティにキーを割り当てる必要があります。 'Text'プロパティはテキストを表示するためのもので、' Name'はキーとして使われるので、そのキーでノードを見つけることができます。また、子孫を含むすべてのノードで見つけたい場合は、2番目のパラメータとして 'true'を渡します:' var node = treeView1.Nodes.Find( "some key"、true).FirstOrDefault(); '次にif (node!= null) 'それから何かする。 * [この投稿](http://stackoverflow.com/a/34228733/3110834)の* Find by Name *の例を参照してください。 –

答えて

1

、したがって、新しいノードを追加しながら、あなたが任意のキーを指定していないので

//matches[0].Nodes.Add ("Your Key", "Node Text to display") 
matches[0].Nodes.Add(loanResult.LoanName,activityResult.ActivityName); 

を以下のように2つのパラメータでオーバーロードを使用し、キーで任意のノードを検索することができません。

+0

私は各ノードにキーとテキストを与えていませんでした。私は 'tvTodoList.Nodes.Add(loanResult.LoanName);を持っていました。名前は空の文字列' "" 'で各ノードにテキストを割り当てていました。 'tvTodoList.Nodes.Add(loanResult.LoanName、loanResult.LoanName);を追加することで、希望の結果が得られました。 – A1raa

関連する問題