从另一个表单添加/删除控件 - C#

时间:2012-02-14 14:40:45

标签: c# winforms

如何在另一个处于活动状态且当前显示的表单中添加或删除控件?我使用以下代码:

    private void button2_Click(object sender, EventArgs e)
    {
        Form1 frm1 = new Form1();
        frm1.Controls.RemoveByKey("button1");
    }

但由于Form1的新初始化,它无法正常工作。

3 个答案:

答案 0 :(得分:1)

如果要删除控件的表单是另一个表单的子表单,则可以通过OwnedForms属性访问表单。访问后,您可以从中删除控件。例如

<强> Form1中

private void button1_Click(object sender, EventArgs e)
{
    var form = new Form3 { Owner = this };
    form.Show();
}

private void button2_Click(object sender, EventArgs e)
{
    if(OwnedForms.Length > 0)
    {
        var form = OwnedForms[0];
        //assuming there's a control with id 'One':
        form.Controls.RemoveByKey("One"); 
    }
}

答案 1 :(得分:1)

从评论中可以看出,Form2没有对Form1的引用。

您没有发布有关如何显示Form2的任何代码,但是这里有一个关于如何通过构造函数传递引用的示例:

public class Form2 : Form {
  private Form1 _Form1;

  public TestForm(Form1 form1) {
    InitializeComponent();
    _Form1 = form1;   // <- this is the reference from Form1
  }
}

然后,您对Form2的删除操作将如下所示:

private void button2_Click(object sender, EventArgs e) {
  _Form1.Controls.RemoveByKey("button1");
}

从Form1创建Form2时,这是一个如何传递它的示例:

private Form2 _Form2;

private void button1_Click(object sender, EventArgs e) {
  _Form2 = new Form2(this);  // <- this is the reference of Form1 you are passing
  _Form2.Show();
}

答案 2 :(得分:0)

如您所知,您需要一个 Form1 的实例 如果这是您的主表单并且您使用Visual Studio向导创建 Windows窗体应用程序,则可以查看程序类。通常有建立的主要形式 现在,您需要将new Form1()表达式分配给变量,并使用按钮 button2 将其分配给第二个表单。