【发布时间】:2021-07-27 06:38:56
【问题描述】:
有两种形式 MainForm 和 HomePageForm。 HomePageForm 位于 MainForm 面板内。主页表单有一个登录按钮。单击登录按钮时,我想关闭 HomePageForm 并在同一面板中打开 LoginForm。
MainForm.cs
private void MainForm_Load(object sender, System.EventArgs e)
{
Homepage homepage = new Homepage()
{
Dock = DockStyle.Fill,
TopLevel = false,
TopMost = true
};
showForm(homepage);
}
public void showForm(Form form)
{
mainPanel.Controls.Add(form);
form.Show();
}
主页.cs
private void Login_Click(object sender, System.EventArgs e)
{
f1.ShowDialog();
this.Hide();
LoginForm loginForm = new LoginForm()
{
Dock = DockStyle.Fill,
TopLevel = false,
TopMost = true
};
MainForm mainForm = new MainForm();
mainForm.showForm(loginForm);
}
这会关闭主页表单,但不会打开登录表单。
【问题讨论】:
-
你不能这样做:
MainForm mainForm = new MainForm();。您正在创建与现有实例无关的MainForm的新实例。您可以使用Homepage.Parent并将新表单添加到您的面板实例(或Homepage.Parent.FindForm())。 -- 你不应该使用表单,而是使用用户控件。 -
你所做的是正确的。您只是没有对 loginForm 进行与 HomePage 相同的操作。你错过了:mainPanel.Controls.Add(loginForm);
-
@jdweng 第一段代码从 MainForm 运行,所以
mainPanel实例可用。第二个块从Homepage运行,它对mainPanel一无所知(即使它只是它的父级)。这就是 OP 试图调用 MainForm 的公共方法的原因;不幸的是,通过创建它的新实例。 -
可能更简单的是在Homepage的构造函数中添加对调用MainForm的引用,然后使用该引用调用showForm。