无法关闭此表格

时间:2019-12-09 15:52:09

标签: c# winforms

我运行一个新表格

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

然后我打电话到FormMain()

Application.Run(applicationContext);

如何通过代码关闭FormMain

这里是FormMain

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using EasyTabs;

namespace CefSharp
{
    public partial class FormMain : Form
    {
        public static AppContainer Container = new AppContainer();


        public FormMain()
        {
            InitializeComponent();
            Container.Tabs.Add(new EasyTabs.TitleBarTab(Container)
            {
                Content = new frmTab
                {
                    Text = "New Tab"
                }
            });
            Container.SelectedTabIndex = 0;
            TitleBarTabsApplicationContext applicationContext = new TitleBarTabsApplicationContext();
            applicationContext.Start(Container);

            Application.Run(applicationContext);

            this.Hide();
            if(Container.ExitOnLastTabClose)
            { 
                this.Close();
            }

        }  
    }
}

3 个答案:

答案 0 :(得分:0)

好吧,这不像我写的没有检查那么简单。我想通了线程使用解决。首先,我们需要在表单上委托:

public delegate void closer();
partial class FormMain {
    public closer Closer;
    (...)
}

在内部类构造函数中或在InitializeComponents中添加Close方法:

this.Closer += Close;

创建公共静态FormMain对象:

static class Program {
    public static FormMain form1;
    (...)
}

然后,您只需在运行窗口中运行线程,然后简单地(在这种情况下为5秒钟)关闭窗口即可。

Program.form1 = new FormMain();
Thread fo = new Thread(() => { Application.Run(Program.form1); });
Thread th = new Thread(() => { Thread.Sleep(5000); Program.form1.Invoke(form1.Closer); });
fo.Start();
th.Start();

答案 1 :(得分:0)

您可以使用两种不同的方法:

  1. 如前所述,您可以使用formMain.Close()
  2. 然后用Application.Exit()完全关闭应用程序。

如果您想要更特殊的东西,请使用Bartek解决方案。但是,您提供给我们的信息仍然不够

答案 2 :(得分:-2)

如果您想从对象外部控制FormMain(),创建ID会比将新对象传递给Application.Run()更好。可能是这样的:

var formMain = new FormMain();
Application.Run(formMain);
formMain.Close();