注意,我下面例子中的Form2相当于你的Form1 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {
Form1 frm = new Form1(); Program.AppContext.MainForm = frm; frm.Show(); this.Close(); } } static class Program { public static ApplicationContext AppContext; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() {
AppContext = new ApplicationContext(new Form2()); Application.Run(AppContext);
} }
Form1 ooo = new Form1(); ooo.Show(); this.Close();
如果你的需求就是这点,那么可以在Main方法中这样写
public void Main()
{
Application.Run(new Form1());
Application.Run(new Form2());
}
.Net的WinForm编程和其他语言(比如VB6)有一个区别,就是主窗口关闭时会导致程序退出,所以你程序必须有一个主窗口,这个窗口不能被关闭,当然,最好别隐藏,除非你隐藏后还有方法把他打开,关于这一点,我建议你别听这个论坛别人的方法了,这类问题我在这个版见得多了,几乎所有人的建议(包括一些5星级专家的建议,我也搞不清这伙家伙是不是只是教育家,从来不去实践)都是让你去隐藏主窗口,这样可能会导致程序无法退出(当然他们会告诉你用Application.Exit退出),可能.Net20没这个问题,因为.Net20在Application.Exit时会正正规规的结束每一个窗口,但在.Net20前,Application.Exit不会调用所有正在打开窗口的Closed和Closing事件,如果你在这两个事件中有处理程序的话,可能导致很严重的后果.
Form2 demo=New Form2();
demo.ShowDialog();form1.Disponse();
========
这是由于main方法执行完了才退出的啊,不是什么“导致”啊,可以直接吧application.run中间的new form1去掉。
至于
为什么我想关闭Form1然后显示Form2
如果你的需求就是这点,那么可以在Main方法中这样写
public void Main()
{
Application.Run(new Form1());
Application.Run(new Form2());
}
.Net的WinForm编程和其他语言(比如VB6)有一个区别,就是主窗口关闭时会导致程序退出,所以你程序必须有一个主窗口,这个窗口不能被关闭,当然,最好别隐藏,除非你隐藏后还有方法把他打开,关于这一点,我建议你别听这个论坛别人的方法了,这类问题我在这个版见得多了,几乎所有人的建议(包括一些5星级专家的建议,我也搞不清这伙家伙是不是只是教育家,从来不去实践)都是让你去隐藏主窗口,这样可能会导致程序无法退出(当然他们会告诉你用Application.Exit退出),可能.Net20没这个问题,因为.Net20在Application.Exit时会正正规规的结束每一个窗口,但在.Net20前,Application.Exit不会调用所有正在打开窗口的Closed和Closing事件,如果你在这两个事件中有处理程序的话,可能导致很严重的后果.
方法也不好用。
这个方法有个坏处.我只要关上form1就出现form2我也不想要这样的效果啊。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
Program.AppContext.MainForm = frm;
frm.Show();
this.Close();
}
}
static class Program
{
public static ApplicationContext AppContext;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
AppContext = new ApplicationContext(new Form2());
Application.Run(AppContext);
}
}
ooo.Show();
this.Close();
Form2 demo=New Form2();
demo.ShowDialog();form1.Disponse();
我想问一下.清理正在使用的资源.那个form1.hide是关闭了,还是在隐藏.
占不占系统资源。
这是MSDN说的
下面是我说的
如果ApplicationContext的主Form在Closed前被替换掉的话,那么它就不会因为原来主Form的关闭而退出程序,而去继续侦听新的主Form的Closed,以此循环,至到它所临控的最新的主Form发生Closed时才退出线程的消息循环.
{
Application.Run(new Form2());
}
else
{
Application.Run(new Form1());
}