如何删除动态创建的按钮

时间:2014-02-08 11:12:40

标签: c# .net

我希望通过在Button中给出范围来动态创建TextBox s 的数量

问题是当我进入范围,例如(3)。它创建3个按钮但是当我给出的范围小于例如(2)之前给出的范围。它没有显示2个按钮,它显示我以前的3个按钮。我的代码适用于大于先前范围的范围,但是当新范围小于先前范围时,它会失败。

这是我的代码:

private void button2_Click(object sender, EventArgs e)
{
    int number = int.Parse(textBox3.Text);
    Button[] textBoxes = new Button[number];
    int location = 136;

    for (int i = 0; i < textBoxes.Length; i++)
    {
        location += 81;
        var txt = new Button();
        textBoxes[i] = txt;
        txt.Name = "text" + i.ToString();
        txt.Text = "textBox" + i.ToString();
        txt.Location = new Point(location, 124);
        txt.Visible = true;
        this.Controls.Add(txt);
    }
}

3 个答案:

答案 0 :(得分:3)

您没有删除以前的控件。您必须将它们存储在一个数组中,然后在创建新数组之前删除它们:

class Form1 : Form {
    private Button[] _textBoxes;

    private void button2_Click(object sender, EventArgs e) {
        int number = int.Parse(textBox3.Text);
        if(_textBoxes != null) {
            foreach(Button b in _textBoxes)
                this.Controls.Remove(b);
        }

        _textBoxes = new Button[number];
        int location = 136;

        for (int i = 0; i < textBoxes.Length; i++) {
            location += 81;
            var txt = new Button();
            _textBoxes[i] = txt;
            txt.Name = "text" + i.ToString();
            txt.Text = "textBox" + i.ToString();
            txt.Location = new Point(location, 124);
            txt.Visible = true;
            this.Controls.Add(txt);
        }
    }
}

我没有测试过这段代码,但我希望你能得到这个想法。

答案 1 :(得分:2)

它没有失败,发生的事情是重叠你创建的前一个按钮。

答案 2 :(得分:0)

首先删除那里已有的按钮。您可以通过在其名称中保留模式或具有全局列表等或以其他方式跟踪它们。当你进入函数时,删除之前存在的所有按钮然后创建新的按钮。