3

当我尝试将列表显示到文本框中时遇到问题。它只显示 list.txt 文件的最后一行。我认为对于每个新行,它都会一直覆盖文本框中的第一行?因此只显示文件的最后一行?

我需要考虑什么才能做到正确?

private void Form1_Load(object sender, EventArgs e)
        {

            const string f = "list.txt";

            List<string> myList = new List<string>();

            using (StreamReader r = new StreamReader(f))
            {
                string line;
                while ((line = r.ReadLine()) != null)
                {
                    myList.Add(line);
                }
            }


            foreach (string s in myList)
            {

                textBox1.Text = string.Join(Environment.NewLine, s);

            }


        }
4

3 回答 3

5

而不是这个:

foreach (myList 中的字符串 s) { textBox1.Text = string.Join(Environment.NewLine, s); }

尝试:

textBox1.Text = string.Join(Environment.NewLine, myList);

并确保 textbox1 的多行属性设置为 true。

于 2013-02-13T17:38:13.487 回答
0

因为每次,您都直接分配给 Text 属性,该属性将删除前一个。这是修复。使文本框的多行为真。

private void Form1_Load(object sender, EventArgs e)
        {

            const string f = "list.txt";

            List<string> myList = new List<string>();

            using (StreamReader r = new StreamReader(f))
            {
                string line;
                while ((line = r.ReadLine()) != null)
                {
                    myList.Add(line);
                }
            }

            var listString = new StringBuilder()
            foreach (string s in myList)
            {
                listString.Append(Environment.Newline)
                listString.Append(s);              

            }
             textBox1.Text = listString.ToString();

        }
于 2013-02-13T17:36:54.727 回答
0

根据我的评论,您可以通过消除 foreach 循环在一个简单的行中做到这一点

textBox1.Text = string.Join(Environment.NewLine, myList.ToArray());

或者只是使用 myList 工作相同

textBox1.Text = string.Join(Environment.NewLine, myList);
于 2013-02-13T17:43:19.813 回答