尝试在C#中删除动态内容时出现NullReferenceException错误

时间:2015-01-26 03:30:04

标签: c# windows forms dynamic nullreferenceexception

我正在尝试开发一个程序,用Windows Forms Application计算一个学期的平均成绩。 好吧,首先我有一个组合框和一个按钮,用于决定我在那个学期上课的次数。当我选择课程数并单击按钮时,它会创建我想要的文本框数量。这一部分没有什么可担心的。 http://www.imageupload.co.uk/images/2015/01/26/Ads%C4%B1z.png http://www.imageupload.co.uk/images/2015/01/26/Ads%C4%B1z1.jpg

让我烦恼的问题是删除动态内容。我认为动态删除和重新创建内容是一个不止一次更改课程数量的好主意。这是我解决方案的代码。

public partial class Form1 : Form
{
    int Syc = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        for (int k = 1; k <= 15; k++) {
            comboBox1.Items.Add(k);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {

        int En = 50;
        int Item=Convert.ToInt32(comboBox1.SelectedItem);
        TextBox[] d1 = new TextBox[Item];
        ComboBox[,] d2 = new ComboBox[Item,2]; //Planning to use it afterwards
        if (Syc == 1) Sil(d1); // Controls if the combobox changed before
        Syc = 1;
        for (int k = 0; k < Item; k++) {
            d1[k] = new TextBox();
            d1[k].Name = "textBox" + (k+1).ToString();
            d1[k].Location = new Point(10,En);
            d1[k].Size = new System.Drawing.Size(100, 15);
            d1[k].Text = "";
            this.Controls.Add(d1[k]);
            En += 25;

        }
    }
    private void Sil(TextBox[] d1) { //This part should have deleted
                         //the dynamical content that created before
        for (int k = d1.Length-1; k >=0; k--) {
            this.Controls.Remove(d1[k]);
            d1[k].Dispose();
        }
    }
}

好吧,我在Sil函数中存在d1 [k] .Dispose的行得到一个NullReferenceError。我感到非常困惑,因为这种错误应该没有任何理由。我创建了文本框的实例,我甚至在Sil函数中再次尝试了这个实例。 我在这里想念的是什么,或者你建议采用什么样的解决方案?

1 个答案:

答案 0 :(得分:0)

  1. 您在哪里将Syc重置为0?

  2. 如果您选择4,导致4 TextBoxSyc = 1,则选择6,您的代码将如何调用{{ 1}}在Disposed1[4]的空指针上?

  3. 设置一些断点并查看。 (提示:我很确定您希望在致电d1[5]之前致电Sil,并且在那里的某个地方,您将要设置d1 = new TextBox[]。)