如何从另一种形式打开面板中的窗体

时间:2014-03-26 10:40:35

标签: c# winforms

我正在使用Windows窗体ASP.net C#

我有panel1,我在其中打开一个名为form1的表单。

form1有一个按钮。在这个按钮上,我想关闭form1并在同一个panel1中打开名为form2的新表单

我在panel1中打开了form1,如下所示

Form1 frm = new Form1();
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
panel1.Controls.Clear();
panel1.Controls.Add(frm);
frm.Visible = true;

请帮忙

1 个答案:

答案 0 :(得分:2)

首先 - 我建议你使用User Controls,它应该被用作其他控件的可重用容器。 Forms应该代表窗口。因此,使用窗体作为托管在另一个窗口上的控件容器并不是一个好主意。如果您需要能够在面板和单独的窗口中显示相同的数据,则在窗体上和Form1上使用相同的用户控件。

所以,用户控制。将它们添加到面板非常简单:

UserControl1 control1 = new UserControl1();
control1.Dock = DockStyle.Fill;
control1.SomethingHappened += UserControl1_SomethingHappened; // see below
panel1.Controls.Clear();
panel1.Controls.Add(control1);

要能够切换用户控件,您可以将事件添加到UserControl1并在单击按钮时将其抬起:

// UserControl1 code
public event EventHandler SomethingHappened;

private void Button1_Click(object sender, EventArgs e)
{
    if (SomethingHappened != null) // notify listeners, if any
       SomethingHappened(this, EventArgs.Empty);
}

然后在主表单上处理此事件:

// MainForm code
private void UserControl1_SomethingHappened(object sender, EventArgs e)
{
    UserControl1 control1 = (UserControl1)sender;
    sender.SomethingHappened -= UserControl1_SomethingHappened;

    UserControl2 control2 = new UserControl2();
    control2.Dock = DockStyle.Fill;
    panel1.Controls.Clear();
    panel1.Controls.Add(control2);
}