2016-08-11 81 views
-2

正試圖在文本框中顯示foreach循環的結果。 Console.WriteLine(「{0}」「{1}」「{2}」,serial,state,capital);如果它是一個控制檯應用程序,我可以輕鬆地做到這一點 ; 但它的Windows窗體應用程序,我想在文本框中顯示結果。如何以窗體形式顯示循環對象

List<StatesCapital> stacap = new List<StatesCapital>(); 
      stacap.Add(new StatesCapital { sn = 1, st = "Anambra", ca = "Awka" }); 
      stacap.Add(new StatesCapital { sn = 2, st = "Abia", ca = "Umuahia" }); 
      stacap.Add(new StatesCapital { sn = 3, st = "Bauchi", ca = "Bauchi" }); 

      var std = from s in stacap select s; 

      foreach (var stud in std) 
      { 
       //converting the looped to string 
       string serial = Convert.ToString((stud.sn)); 
       string state = Convert.ToString(stud.st); 
       string capital = Convert.ToString(stud.ca); 

       //now to display the results in a textbox 
       displaystates.Text = ("{0}" "{1}" "{2}", serial, state, capital); 
     } 
+2

所以這有什麼問題? – Tigran

+1

您可能想追加而不是替換文本。 – SLaks

+0

改爲使用網格。 – LarsTech

回答

0

可以文本追加到文本框:

displaystates.Text += string.Format("\"{0}\" \"{1}\" \"{2}\" \n", serial, state, capital); 

+=操作字符串取左側,追加右側和新的值賦給左側。
string.Format也從Console.WriteLine中調用並使用其值格式化傳遞的格式字符串。
請注意格式字符串末尾的\n。這增加了換行符。

輸出所有行的另一種(通常更快)方法是使用StringBuilder

var sb = new StringBuilder(); 

//in your loop: add the lines 
sb.AppendFormat(("\"{0}\" \"{1}\" \"{2}\" \n", serial, state, capital); 

//after your loop: output the result to the TextBox: 
displaystates.Text = sb.ToString(); 

StringBuilder.AppendFormat做同樣的事情,string.Format但增加了它與一個換行符的StringBuilder -instance可以通過調用ToString()被轉換成字符串結果。 PS:如果你使用C#6,你也應該看看adv12的答案。具有$「」的插值字符串通常比string.FormatAppendFormat更易讀。

+0

謝謝@koopkiller – ambrose

0

如果你在C#6,試試這個:

displaystates.Text = $"{serial} {state} {capital}"; 

這需要一個很酷的新功能的字符串,字符串插值的優勢。

要做到這一點的「老辦法」,試試這個:

displaystates.Text = string.Format("{0} {1} {2}", serial, state, capital); 

編輯:我只注意到有關foreach循環中這樣做的部分,這意味着你可能希望你的TextBox展示成果來自每一行,而不僅僅是最近的。在這種情況下,請按照@Koopakiller的建議使用+=,並且不要忘記在行尾的\r\n

+0

謝謝@ adv12 – ambrose