2017-01-14 4 views
0

私はこの問題を解決するためにforeachを使用しました。私はエラーに遭遇したことはありません。しかし、それはアイテムを間違って送信します。ツリービューからリッチテキストボックスにアイテムを転送するには?

私はこのようにそれをやってみたい:ルーツ:1,2,3と子ノード:A、B、C、D、E、F。 RichTextBoxは、1-> a-> b-> 2-> c-> d-> 3-> e-> fのようになります。ここ

はコードです:

foreach (TreeNode root in treeView1.Nodes) 
     { 

      foreach (TreeNode child in root.Nodes) 
      { 
       richTextBox1.SelectedText = (root.Text + "->" + child.Text); 
      } 


     } 

しかし、それはこのようになります:1> A1-> B2-> C2-> D3-> E3-> F。

どこが間違っていますか?何をやっている

答えて

0

は、すべてのroot->子ペアのために、あなたはその値にTextBoxの終わりを書いているということです。これは、あなたのforループの各繰り返しで1 - > a | 1-> b | 2-> c | 2-> d | 3-> e | 3-> fを与えます。パイプを外してすべての反復を組み合わせると、あなたが投稿したときに1-> a1-> b2-> c2-> d3-> e3-> fとなります。 (これはステップスルーデバッグで見つけられた可能性があります)。

TreeViewを文字列に変換してから、TextBoxに追加することをお勧めします。あなたの問題はRecursionを使用するための完全な例です。まずツリーを文字列に変換し、その文字列をテキストボックスに書き込むメソッドを作成する必要があります。これは2つ以上の深さのTreeViewも処理します。

private string TreeViewToString(TreeView tv, string delimiter) { 
    var result = new StringBuilder(); 

    foreach (TreeNode node in tv.Nodes) { 
     TraverseNodes(node, delimited, result); 
    } 

    if (result.Length < delimiter.Length) { 
     return result.ToString(); 
    } else { 
     return result.ToString(0, result.Length - delimiter.Length); 
    }    
} 

// recursive part 
private void TraverseNodes(TreeNode node, string delimiter, StringBuilder result) { 
    result.AppendFormat("{0}{1}", node.Text, delimiter);  // add node to string 

    foreach (TreeNode subNode in node.Nodes) { 
     TravserseNodes(subNode, delimiter, result);   // recurse into nodes children 
    } 
} 

これを達成する方法はたくさんありますが、ここには1つの方法があります(再帰を理解している場合)。

関連する問題