删除按钮上的文本框/标签单击C#
我试图通过按下按钮一个接一个地删除文本框和标签。 我有一个名为InputExtBox的文本框列表 以下是用于添加的代码:删除按钮上的文本框/标签单击C#,c#,winforms,C#,Winforms,我试图通过按下按钮一个接一个地删除文本框和标签。 我有一个名为InputExtBox的文本框列表 以下是用于添加的代码: private void onClickAdd(object sender, EventArgs e) { inputTextBoxes = new List<TextBox>(); Label label1 = new Label(); label1.Name = "label1"; lab
private void onClickAdd(object sender, EventArgs e)
{
inputTextBoxes = new List<TextBox>();
Label label1 = new Label();
label1.Name = "label1";
label1.Text = "w" + i;
label1.Location = new System.Drawing.Point(5, 10 + (20 * i));
label1.Size = new System.Drawing.Size(30, 20);
this.Controls.Add(label1);
TextBox text1 = new TextBox();
text1.Name = "text1";
text1.Location = new System.Drawing.Point(35, 10 + (20 * i));
text1.Size = new System.Drawing.Size(25, 20);
inputTextBoxes.Add(text1);
this.Controls.Add(text1);
i++;
}
但是它只删除最后添加的文本框,再次单击按钮没有任何作用。如果一次只删除一个文本框,为什么需要foreach循环?只需抓取最后一个或第一个文本框,如果该文本框不为null,则将其从控件中删除:
private void onClickRemove(object sender, EventArgs e)
{
var textBoxToRemove = inputTextBoxes.LastOrDefault();
// or
// var textBoxToRemove = inputTextBoxes.FirstOrDefault();
if (textBoxToRemove != null)
{
this.Controls.Remove(textBoxToRemove);
inputTextBoxes.Remove(textBoxToRemove);
}
}
确保您也从InputExtBox中删除它,以便下次您要求删除文本框时,它不会再次尝试删除它并继续下一个
编辑@Piotr Nowak指出了您的另一个问题,每次添加新文本框时,您都会为InputExtBox分配一个新列表,创建类时应该只分配一次该列表。
从onClickAdd方法中删除此项:
inputTextBoxes = new List<TextBox>();
inputTextBoxes = new List<TextBox>();
InputTextBox=新列表();
并在将列表声明为类中的字段时使用此选项:
private readonly inputTextBoxes = new List<TextBox>();
private readonly inputtextbox=new List();
如果一次只删除一个文本框,为什么需要foreach循环?只需抓取最后一个或第一个文本框,如果该文本框不为null,则将其从控件中删除:
private void onClickRemove(object sender, EventArgs e)
{
var textBoxToRemove = inputTextBoxes.LastOrDefault();
// or
// var textBoxToRemove = inputTextBoxes.FirstOrDefault();
if (textBoxToRemove != null)
{
this.Controls.Remove(textBoxToRemove);
inputTextBoxes.Remove(textBoxToRemove);
}
}
确保您也从InputExtBox中删除它,以便下次您要求删除文本框时,它不会再次尝试删除它并继续下一个
编辑@Piotr Nowak指出了您的另一个问题,每次添加新文本框时,您都会为InputExtBox分配一个新列表,创建类时应该只分配一次该列表。
从onClickAdd方法中删除此项:
inputTextBoxes = new List<TextBox>();
inputTextBoxes = new List<TextBox>();
InputTextBox=新列表();
并在将列表声明为类中的字段时使用此选项:
private readonly inputTextBoxes = new List<TextBox>();
private readonly inputtextbox=new List();
您在OnClickAdd()方法中不断创建新列表:
InputTextBox=新列表();
尝试检查InputExtBox是否为空,然后执行这行代码。否则,就让其余的代码运行。
另外,记住在onClickRemove()方法完成删除文本框/标签后清除InputTextBox列表。您在OnClickAdd()方法中不断创建一个新列表:
InputTextBox=新列表();
尝试检查InputExtBox是否为空,然后执行这行代码。否则,就让其余的代码运行。
另外,请记住在onClickRemove()方法完成删除文本框/标签后清除InputTextBox列表。因为您只有一个文本框请选中此链接-这样做将一次单击删除所有文本框,而不是一个接一个。您也可以简单地隐藏文本框。如果您不需要为任何其他控件保留该位置(意味着您没有在该位置添加任何其他控件)@mihai11因为您只有1个文本框请选中此链接-这样做将在单击时删除所有文本框,而不是逐个删除。您也可以简单地隐藏文本框。如果您不需要为任何其他控件保留该位置(意味着您不需要在该位置添加任何其他控件)@mihai11尝试了此操作,但它仍然只删除最后一个/第一个。很高兴我能提供帮助!我可以看到你是新来的,所以如果你觉得有答案解决了问题,你可以点击绿色复选标记将其标记为“已接受”。谢谢你的提示!尝试过这个,但它仍然只删除最后一个/第一个很高兴我能帮上忙!我可以看到你是新来的,所以如果你觉得有答案解决了问题,你可以点击绿色复选标记将其标记为“已接受”。谢谢你的提示!