2016-03-15 59 views
1
private void btnClear_Click(object sender, EventArgs e) 
    { 
     txtInput.Text = ""; 
     txtOutput.Text = ""; 

     mainList.Clear(); 
    } 

    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 += Environment.NewLine + mainList[i]; 
     } 


    } 

这几乎是我的整个程序,特别是这个清单让我烦恼。当我点击添加时,它会将列表中的每个条目放入文本框中。关闭表单本身并不会清除列表,我的清除按钮也不会。即使使用Clear(),我的清单也不会清除,它甚至在关闭表格后仍保留数据

+2

'List 'btnAdd_Click'中的mainList'是一个局部变量。 'btnClear_Click'中的'mainList'可能是一个类数据成员。 – AlexD

+0

啊,这里没有显示,因为我只包括处理程序,但是我确实将列表声明为全局列表,其中列表 mainList = new List (); – gsr

+0

删除列表 mainList =新列表();在你的btnAdd_Click中,因为它正在将一个List的新实例作为一个内部类变量。 btnClear_Click访问全局mainList变量并清除它,它不会清除你的列表。 – Aizen

回答

0

从评论很明显,你有一个全局变量mainList定义为List<String> mainList = new List<String>();然后ADD_BUTTON中单击要创建另一个表(有当地scope到btnAdd_Click)和添加项目到列表中。这个变量在btnClear_Click中不可用所以实际上这里发生的是将值添加到一个列表并清除另一个列表。

你可以做的是:

  • btnAdd_Click删除List<String> mainList = new List<String>();,如果你不希望增加新的项目之前要清除现有的数据。
  • 如果您需要在添加新项目之前清除现有数据,请在btnAdd_Click中使用mainList = new List<String>();而不是List<String> mainList = new List<String>();。那么你的代码将按照你的预期工作。
0
  • 您正在清空全局变量,而它是空的。
  • 您将文本添加到本地变量,而不是将其添加到全局变量 变量。