0

可能重复:
C# 使用多个表单

我在 C# 中有两种形式。我想关闭一个表格并显示另一个。代码如下:

AMBR A = new AMBR();
this.Close();
A.Show();  

目前的形式是我的主要形式。它显示了我的第二个表单,但是关闭了两个表单并且我的程序停止了。我知道另一种标准方法是隐藏表单,但我的主表单只有一个徽标和加载栏。它不需要与用户进行任何交互。当我隐藏它时,在关闭第二个表单后,程序保持打开状态(如任务管理器中所示)并继续占用资源。我希望主窗体关闭,第二个窗体保持打开状态。

4

6 回答 6

3

打开你的“Program.cs”。将代码修改如下,其中 SplashFrm 是在 Application.Run 调用中创建的当前 Form

static class Program
{
    private static EventHandler idleTemp;
    private static SplashFrm splash;


    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        splash = new SplashFrm();
        splash.Show();
        idleTemp = new EventHandler(Application_Idle);
        Application.Idle += idleTemp;

        Application.Run(new AMBR());
    }

    static void Application_Idle(object sender, EventArgs e)
    {
        splash.Close();
        Application.Idle -= idleTemp;
        idleTemp = null;
        splash = null;
    }
}

然后,在成功加载 AMBR 后,调用Application.RaiseIdle(null);并关闭并清理您的启动画面。

于 2012-07-17T18:03:24.413 回答
2

Application.Run MSDN 页面上有一个示例,它解释了如何继承ApplicationContext以使程序仅在最后一个窗体关闭时结束,而不仅仅是在主窗体关闭时结束。

于 2012-07-17T18:10:34.057 回答
2

不,您不能关闭主窗体并保持打开第二个窗体。但是你可以隐藏它。

this.Hide();

编辑:

另一种解决方案是使用第二个表单作为主表单,并在打开第二个表单(启动表单)时使其不可见。

所以:

this.Visible = false;

//Show the second form
于 2012-07-17T17:56:11.200 回答
1

你试过吗this.Hide()?而不是this.Close();

于 2012-07-17T17:56:15.307 回答
0

听起来您的主要形式有误。您应该将正在打开的另一个窗体更改为主窗体,并且当前作为主窗体的窗体应该由另一个窗体打开。当您当前的主窗体关闭时,将其作为Show您的新主窗体。程序启动时隐藏新的主窗体。

于 2012-07-17T17:57:42.310 回答
0

问题的发生可能是因为您的主要方法是创建第一个表单并等待它关闭。当它关闭主进程并到达导致您的应用程序关闭的结尾时。

要么让主要方法创建第二个表单,要么不关闭第一个表单并隐藏它+隐藏任务栏图标。

于 2012-07-17T17:57:02.863 回答