【问题标题】:How to Open another Form without closing the whole Application c#如何在不关闭整个应用程序的情况下打开另一个窗体 C#
【发布时间】:2022-11-20 20:49:10
【问题描述】:

我有表格(管理员、登录名、用户)。访问用户表单时没有错误,它只是在没有用户和通过的情况下打开它。

我遇到的错误是当我登录并且存在管理表单时,当我单击我的工具条按钮时,整个应用程序退出。

这是我在每个工具条按钮中应用的方法:

public void CloseAllActiveForms()
        {
            List<Form> openForms = new List<Form>();

            foreach (Form f in Application.OpenForms)
                openForms.Add(f);

            foreach (Form f in openForms)
            {
                if (f.Name != "FrmAdmin")
                {
                    f.Close();

                }
            }
        }

这是每个工具提示按钮中的代码:

private void toolStripButton4_Click(object sender, EventArgs e)
        {
            CloseAllActiveForms();
            FrmDashboard objFORM = new FrmDashboard();
            objFORM.MdiParent = this;
            objFORM.TopLevel = false;
            objFORM.FormBorderStyle = FormBorderStyle.None;
            objFORM.Dock = DockStyle.Fill;
            pnlMain.Controls.Add(objFORM);
            objFORM.Show();
        }

这是设计样本。

每次单击 toolstripbutton 都应该进入 pnlMain,但问题是在登录并单击其中一个 toolstripbutton 后它会退出整个 Windows 应用程序。

我尝试搜索这些,发现与我的问题几乎相同,但我认为解决方案不适用于我的问题,因为我认为它仅适用于两种形式,主要形式将放在 program.cs 中,但我有 2我认为但不确定我的主要形式是登录。请赐教。

谢谢

【问题讨论】:

  • 你的 Program.Main 方法是什么样的?
  • 很抱歉回复晚了,program.main 和 program.cs 一样吗?
  • 这是我的 PROGRAM.MAIN 中的方法。 (Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmLogin());)

标签: c#


【解决方案1】:

因为你program.cs中的这一行

Application.Run(new FrmLogin());

FrmLogin 表格是您申请的主要表格。

当应用程序的主窗体关闭时,应用程序终止。我想在登录后,您不会关闭而只是隐藏登录表单。

但是,CloseAllActiveForms 中的代码也会关闭隐藏的登录表单。

一个快速的解决方案可能是跳过CloseAllActiveForms 中的所有隐藏表单或明确跳过CloseAllActiveForms 中的FrmLogin

public void CloseAllActiveForms()
{
    List<Form> openForms = new List<Form>();

    foreach (Form f in Application.OpenForms)
        openForms.Add(f);

    foreach (Form f in openForms)
    {
        if (f.Visible && !(f is FrmAdmin) && !(f is FrmLogin))
        {
            f.Close();

        }
    }
}

还有其他更清洁的解决方案:

  1. 从主窗体显示登录窗体。见how to show login form on front & Mainform Behind Login Form?

  2. ApplicationContext 而非表单传递给 Application.Run。这使您可以更好地控制应用程序何时关闭。见Windows Forms: create the main application after login, which form to run?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多