2016-03-14 50 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); 
相關問題