c# - C# 在面板中打开表单
问题描述
我有 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 中添加一个按钮(仍然显示在面板中)。当我按下该按钮时,Form2 应从 Mainform 面板中删除,而 Form3 应显示在该 MainForm 面板中。我在 Buttonclick 的 Form2 中使用以下代码进行了尝试:
new Mainform().openChildForm(new Form3());
但是,这不起作用。它仍然在 Panel 中显示 Form2 而不显示 Panel3。在 Mainform 中,它还说“activeForm”是“null”。我猜这是因为“new MainForm()”调用。我可以在不创建新实例的情况下访问 MainForm 吗?
解决方案
现在我想在 Form2 中添加一个按钮(仍然显示在面板中)。当我按下该按钮时,Form2 应从 Mainform 面板中删除,而 Form3 应显示在该 MainForm 面板中。
我可以在不创建新实例的情况下访问 MainForm 吗?
在 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());
}
}
推荐阅读
- python - 如何记录在 Python 脚本中执行的所有 Redis 命令?
- javascript - Angular 11 HTML模板到Angular
- java - 如何确定android设备的速度
- php - 条带手动确认 + 连接帐户失败(confirmation_method + stripe_account)
- android - createUserWithEmailAndPassword。未定义命名参数“电子邮件”
- c# - C# GridViewRow FindControl 获取/传递值
- wordpress - WordPress 网站 URL 自动更改
- python - 问:SQLAlchemy 1.4 (2.0) 从 session.execute(statement).scalars().all() 或 session.execute(statement).all() 转换结果时出现问题
- javascript - 我应该如何编写 Pagination 组件 React JS?
- java - 如何将 Native java 中的变量值获取到 Flutter?