删除#C中动态添加的组合框

时间:2014-09-26 19:27:27

标签: c# winforms

我遇到了一个我无法找到解决方案的问题!

我有这个脚本,当按下按钮时动态添加ComboBox

现在我真的想要再次删除最后添加的ComboBox

我有一个计数器c计算已经添加了多少ComboBox个es,这应该不是问题,我只是想不通怎么做!

任何人都可以提出一些不错的想法吗?

int c = 0;
private void button1_Click(object sender, EventArgs e)

ComboBox cboRun = new ComboBox();
cboRun.Name = "cboDynamic" + c++;
cboRun.Location = new System.Drawing.Point(20, 18 + (20 * c));
cboRun.Size = new System.Drawing.Size(200, 25);
this.Controls.Add();

我应该使用哪些代码来删除添加的ComboBox

我尝试了类似

的内容
private void button2_Click(object sender, EventArgs e)
{
    Controls.Remove("cboDynamic" + c.ToString());
}

但没有成功。

5 个答案:

答案 0 :(得分:2)

this.Controls.RemoveAt(this.Controls.Count - 1); 

将删除您添加的最后控件。

答案 1 :(得分:0)

使用RemoveByKey代替Remove

this.Controls.RemoveByKey("cboDynamic" + c.ToString());

答案 2 :(得分:0)

在button2_Click()方法中,您尝试按名称删除控件。您需要使用实际的控件对象才能将其从Controls集合中删除。

尝试以下内容:

private void button2_Click(object sender, EventArgs e)
{
    foreach (var comboBox in this.Controls.OfType<ComboBox>().ToList())
    {
        if (comboBox.Name.Equals("cboDynamic" + c.ToString()))
            this.Controls.Remove(comboBox); 
    }
}

答案 3 :(得分:0)

Controls.Remove()接受一个控制对象......而不是它的ID。

这是一种方法,无论后者添加了什么其他动态控件,它都能正常工作。从本质上讲,我们只需保留组合框的堆栈FIFO,在添加时推送,并在移除时弹出。

private Stack<ComboBox> dynamicBoxes = new Stack<ComboBox>();

private void button1_Click(object sender, EventArgs e) {
    ComboBox cboRun = new ComboBox();
    cboRun.Location = new System.Drawing.Point(20, 18 + (20 * c));
    cboRun.Size = new System.Drawing.Size(200, 25);
    dynamicBoxes.Push(cboRun);
    this.Controls.Add(cboRun);     
}

private void button2_Click(object sender, EventArgs e)  {
    var lastComboBox = dynamicBoxes.Pop();
    Controls.Remove(lastComboBox);
}

答案 4 :(得分:0)

尝试使用RemoveByKey并将1替换为c var,因为此时该值已经增加且控件名称不同。

Controls.RemoveByKey("cboDynamic" + (c-1).ToString());

问候