2011-02-05 21 views
2

私はforeachループをC#で作成しようとしています。 textbox1には場所があり、今ではtextbox2のすべてのフォルダを表示しようとします。しかし、私はエラーが見つかりません:Foreachの問題点#

 string[] filePaths = Directory.GetFiles(@"" + textBox1.Text + ""); 
     foreach (string value in filePaths) 
     { 
      textBox2.Text = "" + value + "\n"; 
     } 

誰かが私を助けることを願っています。

ありがとうございます。

+0

テキストボックスに新しい行を挿入するには、まずTextBoxのMultiLineプロパティがTrueに設定されていることを確認します。次に、次の例のように\ r \ n(キャリッジリターンと改行)を使用します。TextBox1.Text = "最初の行\ r \ n 2行目"; –

+2

複数行の 'TextBox'ではなく、' ListBox'や 'ListView'を使って調査したいかもしれません。これはあなたが表示しようとしているもののはるかに自然なコントロールであり、すべての文字列連結をやるという手間を省くことができます。 (また、なぜあなたは '' ''で文字列を "終わらせる"のですか?それを行う理由はありません。スペースを追加するのではなく、ヌル終端文字もC#文字列もヌル終了する必要はありません。) –

+1

Pro-tip:コントロールに名前を付けます。あなたは、人の名前がtextBox23かtextBox17かどうかを調べるのに時間を無駄にしたくありません。 –

答えて

10

各繰り返しでTextプロパティをリセットしています。最低でも=の代わりに+=を使用してください。多数の文字列を扱っている場合は、効率的な文字列連結演算、特にループ内で起こる文字列連結演算のために、StringBuilderクラスについて学習する価値があります。

StringBuilder sb = new StringBuilder(); 
foreach (string path in filePaths) 
{ 
    sb.AppendLine(path); 
} 
textBox2.Text = sb.ToString(); 
+0

完璧な答え:-)あなたは私の日を作った – Sebastian

5

私はそれを修正しました。

string[] filePaths = Directory.GetFiles(textBox1.Text); 
    foreach (string value in filePaths) 
    { 
     textBox2.Text += value + Environment.NewLine; 
    } 

あなたは=の代わりに+ = textBox2.Textだけの代わりにすべてのファイルのリストの最後のファイル名を持っていた意味で使用していました。

また、無意味なものを取り除き、 "\ n"をEnvironment.NewLineに変更しました。

+2

'+ ='を 'StringBuilder'に変更するのを忘れました。あなたがそれを価値あるものにするためにディレクトリ内に十分なファイルであることがほとんど保証されています。 –

+0

しかし、私は一度に1つの問題をカバーすると思った;) – Quibblesome