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

Posted

技术标签:

【中文标题】关闭一个表单,然后调用另一个表单【英文标题】: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(),它会立即关闭这两个表单。

【问题讨论】:

【参考方案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 是一个按钮,位于您要关闭的表单上。

【讨论】:

以上是关于关闭一个表单,然后调用另一个表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access VBA 中从另一个窗体调用一个窗体的 Form_Load

当我使用线程调用另一个表单并显示它时,组件(标签)无法正常工作

如何使用表单变量调用函数[关闭]

调用webpack打包后的js中的函数报错问题

关闭表单时出现异常(线程+调用)

C# 从另一个线程调用 form.show()