【问题标题】:Closing a form and then call another one关闭一个表单,然后调用另一个表单
【发布时间】:2011-02-14 14:48:15
【问题描述】:

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

我试过了:

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

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

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

有什么提示吗?

编辑:也可以通过在form2.ShowDialog() 之后添加this.Close() 来添加它,只有在我关闭新表单时才会关闭。 如果我选择form2.Show(),它会立即关闭这两个表单。

【问题讨论】:

    标签: c# forms winforms


    【解决方案1】:

    改变

    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();
        }
    

    【讨论】:

    • 但我确实想关闭它。虽然我猜可以隐藏,但是退出form2的时候可以回调吗?
    • @elvispt:是的,你可以这样做。改变 this.Close();到 this.Show();
    • 从 form2 调用隐藏(主)的正确方法是什么?
    • @elvispt:您可以添加到 Form2() 构造函数,Form 类型的参数。你用这个参数传递主窗口(this)。如果您想从 Form2 中调用此主窗口,则可以使用 Show 功能。您可以将此选项 ShowDialog() 更改为 Show() 因为当他被 ShowDialog() 方法阻止时很难显示表单。
    • elvispt:我建议阅读一些 OOP 教程(最好用 C# 编写),因为你显然不知道他说了什么:(
    【解决方案2】:

    您可以使用 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);
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 虽然这可能会回答这个问题,但最好解释一下答案的基本部分,以及 OPs 代码可能存在什么问题。
      【解决方案4】:
      Form2 frm2 = new Form2();
      frm2.ShowDialog();
      

      this.Close();
      

      不是一个好的组合..

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

      this.Hide();
      

      工作...

      【讨论】:

        【解决方案5】:

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

        代码如下:

        this.enabled = false;
        

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

        希望对你有帮助。

        【讨论】:

          【解决方案6】:
          this.Visible = false;
          Form2 form2 = new Form2();
          form2 .ShowDialog();
          this.Close();
          

          【讨论】:

          • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
          • 但这是他问题的答案,请在说它不起作用之前尝试一下他的问题是我想关闭我正在使用的当前表单(MainForm)然后打开第二个表单(Form )。这就是它的答案
          • 主要是你只需要说出你的代码是做什么的,而不是仅仅放出几行代码。
          【解决方案7】:

          把它放在主窗体中

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

          为我工作。

          【讨论】:

            【解决方案8】:

            只需将this.Close() 替换为this.Hide(), 它会完美运行!

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

              • 你测试了吗??
              【解决方案10】:
              new play().Show();
              this.Dispose();
              

              【讨论】:

                【解决方案11】:

                试试这个:

                btCancel.FindForm().Close();
                

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

                【讨论】:

                  猜你喜欢
                  • 2015-02-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-07-27
                  • 1970-01-01
                  • 2017-02-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多