2011-02-05 5 views
2

Я пытаюсь сделать цикл foreach в C#. В textbox1 находится местоположение, и теперь я попытаюсь перечислить все папки в текстовом поле2. Но я не нашел ошибку:Основная проблема в C#

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

Я надеюсь, что кто-то может мне помочь.

С уважением

+0

Чтобы вставить новую строку в TextBox, сначала убедитесь, что для свойства MultiLine для TextBox установлено значение True. Затем используйте \ r \ n (возврат каретки и новая строка), как в следующем примере: TextBox1.Text = "Первая строка \ r \ nСебельная строка"; –

+2

Возможно, вам придется исследовать, используя «ListBox» или «ListView», а не многострочный «TextBox». Это намного более естественный контроль над тем, что вы пытаетесь отобразить, и это избавляет вас от необходимости выполнять все эти конкатенации строк. (Кроме того, почему вы «завершаете» строки с помощью «» «»? Нет причин для этого. Вы не добавляете пробел, и ни один из них не является нулевым терминатором, и вам не нужно нулевое завершение строк 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

отличный ответ :-) ты сделал мой день thx – 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

Да, но я решил, что мы будем покрывать одну проблему за раз;) – Quibblesome

Смежные вопросы