尽管使用了Clear(),我的列表也不会清除,它甚至会在关闭表单后保留数据

时间:2016-03-15 01:20:10

标签: c#

 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];
        }


    }

这几乎是我的整个程序,特别是这个列表让我烦恼。当我点击添加时,它会将列表中的每个条目放入文本框中。关闭表单本身不会清除列表,也不会清除我的清除按钮。

2 个答案:

答案 0 :(得分:0)

从评论中可以清楚地看到,您将全局变量mainList定义为List<String> mainList = new List<String>();然后在Add_button点击内,您将创建另一个列表(对btnAdd_Click具有本地scope)并且将项目添加到列表中。这个变量在btnClear_Click中不可用所以实际上这里发生的是将值添加到一个列表并清除另一个列表。

你能做的是:

  • 如果您不想在添加新项目之前清除现有数据,请从List<String> mainList = new List<String>();移除btnAdd_Click
  • 如果您需要在添加新项目之前清除现有数据,请在mainList = new List<String>();中使用btnAdd_Click代替List<String> mainList = new List<String>();。然后你的代码片段将按预期工作。

答案 1 :(得分:0)

  • 您清空全局变量时它是空的。
  • 您正在向本地变量添加文本,而不是将其添加到全局变量 变量