【问题标题】:C# Close a form in panel and open a new form in the same panelC# 在面板中关闭一个表单并在同一面板中打开一个新表单
【发布时间】: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。

标签: c# winforms


【解决方案1】:

您不能创建MainForm 类的实例并调用其方法,但必须使用现有实例。要使用打开的表单,您必须找到带有程序名称的表单。

Login_Click 更改为:

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 = Application.OpenForms.OfType<MainForm>().Where(x => x.Name == "mainFormName").FirstOrDefault();
    mainForm.showForm(loginForm);
}

Where(x =&gt; x.Name == "mainFormName") 行中输入表单名称而不是mainFormName。

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多