2016-03-14 84 views
0
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]; 
     } 
    } 

这是在一个按钮处理程序中,并且还有一个用于输入的文本框。但是,无论何时按下按钮,它都会覆盖以前的条目。我想将我的列表中的所有内容都放入文本框中。将行添加到列表中的富文本框时遇到问题

+0

有趣的,虽然有一些关于如何解决这个问题,没有人打扰指出根本原因的几点建议 - '='是赋值运算符,实际上OP是想要连接的。 – Tim

回答

0

3个选项:

修复分配

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

或取代用于循环

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

或更换循环和StreamReader的

txtOutput.Text = File.ReadAllText("texter.txt"); 
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而不是避免循环。

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); 
相关问题