将行添加到列表中的富文本框时遇到问题
问题描述:
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];
}
}
这是在一个按钮处理程序中,并且还有一个用于输入的文本框。但是,无论何时按下按钮,它都会覆盖以前的条目。我想将我的列表中的所有内容都放入文本框中。将行添加到列表中的富文本框时遇到问题
答
3个选项:
修复分配
txtOutput.Text += mainList[i] + Environment.NewLine;
或取代用于循环
txtOutput.Text = string.Join(Environment.NewLine, mainList);
或更换循环和StreamReader的
txtOutput.Text = File.ReadAllText("texter.txt");
答
您正在使用=
运算符不会添加任何内容,它会将值分配给属性。 使用+=
运算符或将文本值分配给先前值+新值的总和。
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);
另外,还可以使用Aggregate
或Join
而不是避免循环。
var text = mainList.Aggregate((x, next) => string.Format("{0}\n{1}", next, x));
var text = string.Join("\n", mainList);
此外,您还可以使用ReadAllText方法一气呵成字符串读取整个文件。
var text = File.ReadAllText("texter.txt");
然后将其添加到TextBox
txtOutput.Text = string.Format("{0}\n{1}", mainList[i], text);
有趣的,虽然有一些关于如何解决这个问题,没有人打扰指出根本原因的几点建议 - '='是赋值运算符,实际上OP是想要连接的。 – Tim