【问题标题】:Closing the first form [duplicate]关闭第一个表格[重复]
【发布时间】:2012-11-22 00:26:08
【问题描述】:

可能重复:
How do I prevent the app from terminating when I close the startup form?

想象一个具有 2 个表单(Form1 和 Form2)的应用程序。当我单击 Form1 中的按钮时,我想打开 Form2 并关闭 Form1,关闭而不是隐藏。 我的做法是:

_Form2 = new Form2();
_Form2.Show();
 this.Close();//or this.Dispose();

当我运行代码时,它会关闭 form1 并结束应用程序。我不确定,但可能是因为在我的 Program.cs 中有Application.Run(new Form1());?或者这一行只表示应用程序启动时应该加载Form1?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    有多种方法可以实现您想要的......这完全取决于您需要在Form1Form2 之间进行微妙的交互,以及您希望如何组织序列。

    一种方法是改用Application.Run()....但是当您想关闭您的应用程序时,您必须使用Application.Exit()....因为您需要指示消息循环和您的应用程序应该退出。

    请注意,这是在您认为不再显示表单时对表单执行的任何“表单关闭”调用(即 .Close())的补充。

    这将允许您最初显示Form1....(因为您使用无模式Show()).....然后您可以关闭Form1并创建并显示辅助Form2 .....然后做Application.Exit();

    MSDN 中更复杂的示例,即带有上下文的 Application.Run(ApplicationContext) 是,如果您有一个用例,您希望拥有多个表单,然后希望在它们都关闭时退出。

    【讨论】:

      【解决方案2】:

      是的,你是对的。 Run 方法中提到的窗体是“主窗体”,如果你关闭它,你将关闭应用程序。如果你想关闭Form1,你可以这样做:

      Application.EnableVisualStyles();
                  Application.SetCompatibleTextRenderingDefault(false);
                  Form1 form = new Form1();
                  form.Show();
                  Application.Run();
      

      点击按钮关闭Form1并打开Form2的代码:

      public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
              }
      
              private void button1_Click(object sender, EventArgs e)
              {
                  this.Close();
                  Form2 form = new Form2();
                  form.Show();
              }
          }
      

      要退出应用程序,只需再添加一个按钮(或提供事件处理程序)并运行以下代码:

      Application.Exit();
      

      【讨论】:

        【解决方案3】:

        如果你只需要一个表单序列,你可以让主线程处理这个序列。

        所以总的来说,你有:

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            Application.Run(new Form2());
        }
        

        您需要做的就是关闭 Form1 以继续下一个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 2013-02-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-29
          • 1970-01-01
          • 2012-04-24
          相关资源
          最近更新 更多