C# 关闭一个表单,然后调用另一个表单

C# 关闭一个表单,然后调用另一个表单,c#,forms,winforms,C#,Forms,Winforms,我想关闭当前的表单(MainForm),然后打开第二个表单(form) 我试过: private void buttonStartQuiz_Click(object sender, EventArgs e) { this.Close(); Form2 form2 = new Form2(); form2.ShowDialog(); } 或者添加this.Close()也不起作用 有什么提示吗 编辑:最好在form2.ShowDialog()之后添加this.Close

我想关闭当前的表单(MainForm),然后打开第二个表单(form)

我试过:

private void buttonStartQuiz_Click(object sender, EventArgs e)
{
    this.Close();

    Form2 form2 = new Form2();
    form2.ShowDialog();
}
或者添加
this.Close()form2.ShowDialog()之后的code>也不起作用

有什么提示吗

编辑:最好在
form2.ShowDialog()
之后添加
this.Close()
,只有当我关闭新表单时,它才会关闭。 如果我选择
form2.Show()
,它会立即关闭两个表单。

更改

this.Close();
致:

因为您无法关闭主应用程序窗口并希望应用程序在其之后运行。 您必须隐藏主窗体或将主窗口更改为仍然打开的窗口

在这种情况下,必须在
ShowDialog()
结束后关闭主窗口。 然后,必须在此按钮的末尾添加事件函数
this.Close()

您的代码新代码是:

private void buttonStartQuiz_Click(object sender, EventArgs e)
    {
        // hide main form
        this.Hide();

        // show other form
        Form2 form2 = new Form2();
        form2.ShowDialog();

        // close application
        this.Close();
    }

您要先关闭表单,必须先加载第二个表单

private void buttonStartQuiz_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
this.Close();
}

您可以随意处理ApplicationContext,但是.NET framework已经通过WindowsFormsApplicationBase类很好地支持这种窗口模式。它的ShutdownStyle属性可用于仅在关闭最后一个窗口后关闭程序。使Program.cs中的代码如下所示:

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;  // Add reference to Microsoft.VisualBasic!!

namespace WindowsFormsApplication1 {
  class Program : WindowsFormsApplicationBase {
    [STAThread]
    static void Main(string[] args) {
      var app = new Program();
      app.EnableVisualStyles = true;
      app.ShutdownStyle = ShutdownMode.AfterAllFormsClose;
      app.MainForm = new Form1();
      app.Run(args);
    }
  }
}

这不是一个好的组合

frm2将实际加载,但您甚至看不到它,因为
this.Close()将在毫秒内关闭每个窗体

this.Hide();

工作…

只需启用或禁用表单本身,而不是尝试关闭

将其编码为:

this.enabled = false;
在“单击”事件中或您想要的任何位置

希望有帮助。

试试这个:

btCancel.FindForm().Close();
btcancel
是放置在要关闭的窗体上的按钮。

将其放入主窗体

this.Visible = false;
Form2 form2 = new Form2();
form2 .ShowDialog();
this.Close();
private void mainform_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

为我工作。

只需将
this.Close()
替换为
this.Hide()

它将完美地工作

这对我来说很好

private void button_Name_Click(object sender, EventArgs e)
    {
        form_2 Form2 = new Form2();
        Form2.ShowDialog();
        this.Close();
    }

但我确实想关闭它。虽然我想我可以把它藏起来,但当我退出form2时,我可以把它叫回来?@elvispt:是的,你可以这么做。更改此选项。关闭();到这个。Show();从form2调用隐藏(main)的正确方法是什么?@elvispt:您可以向form2()构造函数添加Form类型的参数。您可以使用此参数通过主窗口(此)。如果你想从Form2中调用,你可以调用这个带有Show函数的主窗口。您可以使用此选项ShowDialog()更改为Show(),因为当表单被ShowDialog()方法阻止时,很难显示表单。elvispt:我建议您阅读一些OOP教程(最好是C#),因为您显然不知道他说了什么:(这并不提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时在自己的帖子上发表评论,一旦您有足够的评论,您就可以发表评论。但这是他的问题的答案,请在说它不起作用之前尝试一下。他的问题我想结束了吗我正在使用的当前表单(主表单),然后打开第二个表单(表单).这就是答案主要是,你只需要告诉你的代码是做什么的,而不仅仅是写出一行行代码。你测试过吗?虽然这可能回答了这个问题,但最好解释一下答案的基本部分,以及OPs代码可能存在的问题。
this.Visible = false;
Form2 form2 = new Form2();
form2 .ShowDialog();
this.Close();
new play().Show();
this.Dispose();
private void mainform_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
private void button_Name_Click(object sender, EventArgs e)
    {
        form_2 Form2 = new Form2();
        Form2.ShowDialog();
        this.Close();
    }