关闭表单然后再调用另一个表单

时间:2010-05-01 18:25:32

标签: c# forms winforms

我想关闭我正在使用的当前表单(MainForm),然后打开第二个表单(表单)。

我试过了:

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

    Form2 form2 = new Form2();
    form2.ShowDialog();
}

或者在this.Close();之后添加form2.ShowDialog()也不起作用。

任何提示?

编辑:也可以在this.Close()关闭新表单后关闭form2.ShowDialog()之后添加form2.Show()。 如果我选择{{1}},则会立即关闭两个表单。

11 个答案:

答案 0 :(得分:34)

更改

this.Close();

要:

this.Hide();

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

在这种情况下,您必须在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();
    }

答案 1 :(得分:6)

您可以使用ApplicationContext,但.NET框架已经非常好地支持使用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);
    }
  }
}

答案 2 :(得分:1)

这对我来说很好......

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

答案 3 :(得分:0)

Form2 frm2 = new Form2();
frm2.ShowDialog();

this.Close();

不是一个很好的组合..

frm2实际上会加载,但你甚至看不到它,因为this.Close();只会在一毫秒内关闭每个表单......

this.Hide();

工程...

答案 4 :(得分:0)

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

编码:

this.enabled = false;

在点击事件中或您想要的任何地方。

希望它有所帮助。

答案 5 :(得分:0)

只需替换this.Close();与this.Hide(); 它会完美运作!

答案 6 :(得分:-1)

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

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

答案 7 :(得分:-1)

试试这个:

btCancel.FindForm().Close();

btcancel是一个位于您要关闭的表单上的按钮。

答案 8 :(得分:-1)

this.Visible = false;
Form2 form2 = new Form2();
form2 .ShowDialog();
this.Close();

答案 9 :(得分:-1)

new play().Show();
this.Dispose();

答案 10 :(得分:-2)

将其置于主要表格

private void mainform_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

为我工作。