C# C中的结束形式#
可能重复:C# C中的结束形式#,c#,windows,forms,C#,Windows,Forms,可能重复: 我有两种C形式。我想关闭一个表单并显示另一个表单。代码如下: AMBR A = new AMBR(); this.Close(); A.Show(); 当前表单是我的主要表单。它显示了我的第二个窗体,但随后关闭了这两个窗体,程序停止。我知道另一个标准方法是隐藏表单,但我的主表单只有一个徽标和加载栏。它不需要与用户进行任何交互。当我隐藏它时,在第二个窗体关闭后,程序保持打开状态(如任务管理器中所示),并继续占用资源。我希望主窗体关闭,第二个窗体保持打开状态。否您不能关闭主窗体并
我有两种C形式。我想关闭一个表单并显示另一个表单。代码如下:
AMBR A = new AMBR();
this.Close();
A.Show();
当前表单是我的主要表单。它显示了我的第二个窗体,但随后关闭了这两个窗体,程序停止。我知道另一个标准方法是隐藏表单,但我的主表单只有一个徽标和加载栏。它不需要与用户进行任何交互。当我隐藏它时,在第二个窗体关闭后,程序保持打开状态(如任务管理器中所示),并继续占用资源。我希望主窗体关闭,第二个窗体保持打开状态。否您不能关闭主窗体并保持第二个窗体打开。但是你可以把它藏起来
this.Hide();
编辑: 另一个解决方案是使用第二个窗体作为主窗体,并在打开第二个窗体(splash窗体)时使其不可见 因此:
您是否尝试过
this.Hide()
;而不是this.Close()代码>?发生此问题的原因可能是您的主要方法正在创建第一个表单并等待它关闭。当它关闭时,主进程将继续并到达末尾,这将导致应用程序关闭
要么让main方法创建第二个窗体,要么不关闭第一个窗体,只隐藏它+隐藏任务栏图标。听起来你的主窗体好像搞错了。您应该将要打开的另一个窗体更改为主窗体,并且当前主窗体的窗体应该由另一个窗体打开。当前主窗体关闭后,让它显示新的主窗体。在程序启动时隐藏新的主窗体。打开“program.cs”。将代码修改为如下所示,其中SplashFrm是在应用程序中创建的当前表单。运行调用
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;
}
}
静态类程序
{
私有静态事件处理程序idleTemp;
私人静态飞溅FRM飞溅;
///
///应用程序的主要入口点。
///
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
飞溅=新的飞溅frm();
splash.Show();
idleTemp=新的事件处理程序(应用程序\u Idle);
Application.Idle+=idleTemp;
运行(新的AMBR());
}
静态无效应用程序\u空闲(对象发送器、事件参数)
{
splash.Close();
Application.Idle-=idleTemp;
idleTemp=空;
splash=null;
}
}
然后,在成功加载AMBR后,调用Application.RaiseIdle(null)代码>将关闭并清理您的飞溅。MSDN页面上有一个示例,说明如何从ApplicationContext
继承,使您的程序仅在关闭最后一个表单时结束,而且不仅仅是在主窗体关闭之后。为什么不将第二个窗体作为主窗体,并将第一个窗体显示为初始屏幕?OP讨论了为什么这不是一个理想的解决方案。是的,但是如果关闭主线程,程序将无法继续执行。所以使用这个。Close();如果这是他的主要形式,则不会在这里工作。@Servy-并不意味着这不是正确的解决方案,如果留给他自己,作者将实现解决方案Application.Exit()
解决所有问题。@Ramhound哦,不,它不能解决所有问题。它解决了一个难题。这当然是有可能的,但这需要在答案中详细说明,以使其合适。很明显,OP只是试图隐藏表单,但没有成功。如果你想提出这个答案,你需要提供一切必要的东西,让它真正发挥作用。此外,这些问题是根设计问题的结果。与其绕过这个问题,不如简单地解决根本问题(没有正确的主窗体)。是的,尝试过这个,但它的正确性讨论了为什么这不是一个理想的解决方案。“我知道另一种方法是隐藏表单,但我的主表单只有徽标和加载栏,它不需要与用户进行任何交互,因此当我隐藏表单时,当第二个表单关闭时,程序在任务管理器中保持打开状态并占用资源”@Servy-事实上,作者不知道如何以正确的方式实施此建议,这并不意味着它应该被否决,使用this.Hide()
是正确的答案。作者问题的解决方案是在关闭AMBR
窗体时关闭()隐藏窗体。换句话说,Application.Exit()
@Ramhound不仅使用这个.Hide()不是正确的答案,甚至不是一个好主意。当然,它会工作,但这是一个坏主意,因为你有这个物体漂浮在周围没有任何理由。当然,基于这个问题,性能和内存管理可能是最不关心的问题,但没有理由将他发送到错误的路径。@Ramhound使用this.Hide
显然不是答案。OP已经试过了,但不起作用。如果使用this.Hide
以及其他一些方法都有效,那么这可能就是一个答案。因为所有其他的东西都不包括在内,甚至不包括在内;这不是答案。此外,正如J.Torres所说,将启动屏幕作为整个应用程序隐藏的主要形式,并使用app.Exit
结束应用程序,这是不“正确的”。这只是一个糟糕的设计,可能有效,也可能无效,但肯定不能解决实际问题。这很容易成为一个评论,像其他人一样,一些代码如何?@Ramhound只有5个答案中的1个包含真正数量的代码,所以我看不出“其他人”是如何使用代码的。如果解释得好的话,在没有代码的情况下解释一个问题作为大多数问题的答案是完全可以接受的。但是加载条应该首先出现,而不是下一个表单,这是我的设计,而不是表单先加载
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;
}
}