C# 在面板中打开窗体
C# open Form in Panel
我有3个表格。 Mainform、Form2 和 Form3。
Mainform 包含一个大面板,程序启动时会在其中显示 Form 2。
我在我的 Mainform 中使用以下代码执行此操作,效果很好:
private Boolean loaded = false;
private void MainForm_Load(object sender, EventArgs e)
{
if (!loaded)
{
openChildForm(new Form2());
loaded = true;
}
}
public Form activeForm = null;
public void openChildForm(Form childForm)
{
if (activeForm != null)
{
activeForm.Close();
}
activeForm = childForm;
childForm.TopLevel = false;
panelMain.Controls.Add(childForm);
panelMain.Tag = childForm;
childForm.BringToFront();
childForm.Show();
}
现在我想在Form2中添加一个按钮(它仍然显示在Panel中)。
当我按下该按钮时,Form2 应从 Mainform 面板中删除自身,而 Form3 应显示在该 MainForm 面板中。我在 Buttonclick 的 Form2 中尝试使用以下代码:
new Mainform().openChildForm(new Form3());
但是,这不起作用。它仍然在 Panel 中显示 Form2,不显示 Panel3。
在 Mainform 中,它还表示“activeForm”为“null”。我猜这是因为调用了“new MainForm()”。我可以只访问主窗体而不创建新实例吗?
Now I want to add a button in Form2 (which is still being displayed in
the Panel). When I press that Button, Form2 should remove itself from
the Mainform Panel and instead Form3 should be displayed in that
MainForm panel.
Can I just access the MainForm without creating a new Instance?
在 Form2 中,您可以将 ParentForm 属性 转换为 MainForm
,然后调用 openChildForm()
反对它:
// ... in Form2 ...
private void button1_Click(object sender, EventArgs e)
{
MainForm mf = this.ParentForm as MainForm;
if (mf != null)
{
mf.openChildForm(new Form3());
}
}
我有3个表格。 Mainform、Form2 和 Form3。
Mainform 包含一个大面板,程序启动时会在其中显示 Form 2。
我在我的 Mainform 中使用以下代码执行此操作,效果很好:
private Boolean loaded = false;
private void MainForm_Load(object sender, EventArgs e)
{
if (!loaded)
{
openChildForm(new Form2());
loaded = true;
}
}
public Form activeForm = null;
public void openChildForm(Form childForm)
{
if (activeForm != null)
{
activeForm.Close();
}
activeForm = childForm;
childForm.TopLevel = false;
panelMain.Controls.Add(childForm);
panelMain.Tag = childForm;
childForm.BringToFront();
childForm.Show();
}
现在我想在Form2中添加一个按钮(它仍然显示在Panel中)。 当我按下该按钮时,Form2 应从 Mainform 面板中删除自身,而 Form3 应显示在该 MainForm 面板中。我在 Buttonclick 的 Form2 中尝试使用以下代码:
new Mainform().openChildForm(new Form3());
但是,这不起作用。它仍然在 Panel 中显示 Form2,不显示 Panel3。 在 Mainform 中,它还表示“activeForm”为“null”。我猜这是因为调用了“new MainForm()”。我可以只访问主窗体而不创建新实例吗?
Now I want to add a button in Form2 (which is still being displayed in the Panel). When I press that Button, Form2 should remove itself from the Mainform Panel and instead Form3 should be displayed in that MainForm panel.
Can I just access the MainForm without creating a new Instance?
在 Form2 中,您可以将 ParentForm 属性 转换为 MainForm
,然后调用 openChildForm()
反对它:
// ... in Form2 ...
private void button1_Click(object sender, EventArgs e)
{
MainForm mf = this.ParentForm as MainForm;
if (mf != null)
{
mf.openChildForm(new Form3());
}
}