我遇到了一个我无法找到解决方案的问题!
我有这个脚本,当按下按钮时动态添加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());
}
但没有成功。
答案 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());
问候