C# 动态添加时删除标记到按钮的文本框

C# 动态添加时删除标记到按钮的文本框,c#,winforms,dynamic-controls,C#,Winforms,Dynamic Controls,下面是代码。在这里,我添加了两个文本框和一个按钮动态点击按钮。我将文本框标记为动态创建的按钮删除。所以,点击删除按钮,我需要删除标记到它的文本框。但只有一个文本框被删除,而另一个文本框没有被删除。我无法找出发生tat的原因 private void button1_Click(object sender, EventArgs e) { int c=0; int v; v = c++; panel1.VerticalScroll.Value = VerticalS

下面是代码。在这里,我添加了两个文本框和一个按钮动态点击按钮。我将文本框标记为动态创建的按钮删除。所以,点击删除按钮,我需要删除标记到它的文本框。但只有一个文本框被删除,而另一个文本框没有被删除。我无法找出发生tat的原因

   private void button1_Click(object sender, EventArgs e)
    {
     int c=0;   
int v;
v = c++;
  panel1.VerticalScroll.Value = VerticalScroll.Minimum;

Button btn = new Button();
btn.Name = "btn" + v;
btn.Text = "Remove";
btn.Location = new Point(370, 5 + (30 * v));
btn.Click += new EventHandler(btn_Click);


TextBox txt = new TextBox();
txt.Name = "TextBox" + v;
txt.Location = new Point(30, 5 + (30 * v));
txt.Tag = btn;


TextBox txt1 = new TextBox();
txt1.Name = "TextBox2" + v;
txt1.Location = new Point(170, 5 + (30 * v));
txt1.Tag = btn;


panel1.Controls.Add(txt);
 panel1.Controls.Add(txt1);

panel1.Controls.Add(btn);

}

private void btn_Click(object sender, EventArgs e)
 {


  //to remove control by Name
    foreach (Control item in panel1.Controls.OfType<Control>())
 {
     if (item.Tag == sender || item == sender)
        panel1.Controls.Remove(item);
 }
}

从列表中删除项目时,请尝试使用for,而不是使用foreach,然后向后迭代。以下问题有一些与此问题性质类似的解决方案:

因此,类似这样的代码我还没有测试过,但这是总体思路:

// Iterate over each control to remove, and remove it
for (int i = panel1.Controls.Count - 1; i >= 0; i--) 
{
    var item = panel1.Controls[i];
    if (item.Tag == sender || item == sender)
        panel1.Controls.Remove(item);
}

请不要在问题标题中包含有关语言的信息,除非没有它就没有意义。标签就是为了这个目的。