从列表中添加行到富文本框时遇到问题

时间:2016-03-14 23:22:58

标签: c# winforms

    private void btnAdd_Click(object sender, EventArgs e)
    {
        StreamWriter outputFile;
        outputFile = File.AppendText("texter.txt");
        outputFile.WriteLine(txtInput.Text);
        outputFile.Close();

        List<String> mainList = new List<String>();

        StreamReader inputFile;
        inputFile = File.OpenText("texter.txt");
        while (inputFile.EndOfStream == false)
        {
            mainList.Add(inputFile.ReadLine());
        }
        inputFile.Close();

        for (int i = 0; i < mainList.Count; i++)
        {
            txtOutput.Text = mainList[i];
        }
    }

这是一个按钮处理程序,还有一个文本框用于输入。然而,每当我按下按钮时,它都会覆盖前一个条目。我希望从列表中的所有内容到文本框中。

2 个答案:

答案 0 :(得分:2)

您使用的=运算符不会添加任何内容,它会为属性赋值。 使用+=运算符或将文本值指定为前一个值+新值的总和。

txtOutput.Text += mainList[i];
// or 
txtOutput.Text = txtOutput.Text +  mainList[i];
// or 
txtOutput.Text = mainList[i] + txtOutput.Text;

但我建议使用String.Format代替++=运算符

txtOutput.Text = string.Format("{0}\n{1}", mainList[i], txtOutput.Text);

此外,您可以使用AggregateJoin来避免使用for循环。

var text = mainList.Aggregate((x, next) => string.Format("{0}\n{1}", next, x));
var text = string.Join("\n", mainList);

此外,您可以使用ReadAllText方法在一个go字符串中读取整个文件。

var text = File.ReadAllText("texter.txt");

然后将其添加到TextBox

 txtOutput.Text = string.Format("{0}\n{1}", mainList[i], text);

答案 1 :(得分:0)

3个选项:

修复作业

txtOutput.Text += mainList[i] + Environment.NewLine;

或替换循环

txtOutput.Text = string.Join(Environment.NewLine, mainList);

或者替换循环和StreamReader

txtOutput.Text = File.ReadAllText("texter.txt");