如何在Windows窗体中显示循环对象

时间:2016-08-11 20:29:39

标签: c# linq loops foreach

我正试图在文本框中显示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 个答案:

答案 0 :(得分:0)

您可以追加文字到TextBox:

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 - 实例的换行符,可以通过调用ToString()将其转换为字符串。

PS:如果你使用C#6,你也应该看看adv12的答案。使用$&#34;&#34;的插值字符串通常比string.FormatAppendFormat更具可读性。

答案 1 :(得分:0)

如果你在C#6工作,请尝试这样做:

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

这利用了一个很酷的新字符串功能,即内插字符串。

以旧的方式做到这一点,&#34;试试这个:

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

编辑:我刚刚注意到在foreach循环中执行此操作的部分,这意味着您可能希望TextBox显示每行的结果,而不仅仅是最近的结果。在这种情况下,请使用+=作为@Koopakiller建议,并且不要忘记行尾的\r\n