如何在c#中从表单中动态删除UserControl?

时间:2018-06-15 01:09:06

标签: c# .net forms

我有一个动态添加到FlowLayoutPanel的UserControl。在同一个UserControl中,如果用户想要它,我有一个按钮可以自动删除它,显然是在运行时。要消除我的意思不仅要消除紧密按钮,还要包含按钮的完整UserControl。 此时动态添加UserControl的代码如下:

    private void agregaUC() {
        UserControl1 UC = new UserControl1();
        aux += 1;
        UC.Tag = aux.ToString();
        flowLayoutPanel2.Controls.Add(UC);
    }

消除此问题的代码位于表单的一侧,即添加UserControl的位置。删除UserControl的按钮事件由代码通过运算符+ =抛出,然后我写下你给我的建议。

3 个答案:

答案 0 :(得分:0)

Control.Parent Property

  

备注:将Parent属性值设置为null会从当前父控件的Control.ControlCollection中删除该控件。

所以

plot data u 1:2 w p pt 7 ps 1 pi 2000 lc rgb "red" title "density"

修改

该代码旨在从用户控件本身中调用。

答案 1 :(得分:0)

你可以尝试类似的东西。

this.Parent = null;

答案 2 :(得分:0)

编辑:根据您添加的代码示例,我修改了以下代码,以便更好地满足您的需求。您需要了解如何访问您尝试删除的控件的标记。

由于您没有引用,因此您应该确保找到.Tag属性,因为这样您就可以执行类似

的操作
  foreach (Control c in flowLayoutPanel2.Controls) {
    if (c.Tag == "Aux") {
      flowLayoutPanel2.Controls.Remove(c);
      c.Dispose();
      break;
    }
  }

修改

阅读各处的所有评论,似乎这就是正在发生的事情。用户控件中有UserControlButton(删除),按钮的Click事件由窗口订阅,并且它在这个事件处理程序,我们正试图从UserControl

中删除flowLayoutPanel2

根据这些假设,您的功能应如下所示:

void UserControl_Delete_Click(object sender, EventArgs e)
{
    Button Delete = (Button)sender;
    UserControl UC = (UserControl)Delete.Parent;
    flowLayoutControl2.Controls.Remove(UC);
    UC.Dispose();
}

这假设了很多关于一切的内部结构,因为我没有代码来确认这将起作用。不过,它会让你走很长的路,而且只需要根据UserControl的实际结构进行一些调整。