从面板中删除动态控件

时间:2012-12-14 15:27:34

标签: c#

我在Windows窗体的面板上动态生成控件,我还生成了一个用于删除控件的按钮, 控件在行代码上,

    int c = 0;
    private void button1_Click(object sender, EventArgs e)
    {
        int v;
        v = c++;
        panel1.VerticalScroll.Value = VerticalScroll.Minimum;
        ComboBox combo = new ComboBox();
        combo.Name = "combobox" + v ;
        combo.Location = new Point(30, 5 + (30 * v));

        ComboBox combo2 = new ComboBox();
        combo2.Name = "combobox2" + v ;
        combo2.Location = new Point(170, 5 + (30 * v));

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

        TextBox txt2 = new TextBox();
        txt2.Name = "txtbx2" + v;
        txt2.Location = new Point(450, 5 + (30 * v));

        TextBox txt3 = new TextBox();
        txt3.Name = "txtbx3" + v;
        txt3.Location = new Point(600, 5 + (30 * v));

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



        panel1.Controls.Add(combo);
        panel1.Controls.Add(btn);
        panel1.Controls.Add(txt);
        panel1.Controls.Add(combo2);
        panel1.Controls.Add(txt2);
        panel1.Controls.Add(txt3);
        btn.Click += new EventHandler(btn_Click);

    }
    private void btn_Click(object sender, EventArgs e)
    {

        // what i have to write here for removing only the textbox and combobox and  button itself to be removed only the controls which are  aside the button

    }

我必须在按钮点击事件中写入,仅删除文本框和组合框以及按钮本身以删除按钮旁边的控件,其他行控件不应受此影响,

2 个答案:

答案 0 :(得分:2)

foreach(var item in panel1.Controls)
{

    if(item is TextBox || item is ComboBox)
    {
          panel1.Controls.Remove(item);
    }


}

或者您可以尝试以下方法。

 var list = (from object item in panel1.Controls where item is TextBox || item is ComboBox select item as Control).ToList();

            list.ForEach(x => panel1.Controls.Remove(x));

答案 1 :(得分:1)

您需要在包含元素内找到Control by Name。

这取决于您开发的框架。 C#不是很有帮助;)

然后你可以用

删除它
SomeParentElement.Comtrols.Remove(SomeElement)