请高手指教.为什么我想关闭Form1然后显示Form2.我用的是show()方法
可是Form2一闪就关上了。为什么啊
我写了this.Form1.Closed事件了,还是不行.
请高手给个代码.说明一下更好。

解决方案 »

  1.   

    为什么我想关闭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事件,如果你在这两个事件中有处理程序的话,可能导致很严重的后果.
      

  2.   

    jointan() ( ) 信誉:98    Blog 不需要这样吧form1.Hide();
    Form2 demo=New Form2();
    demo.ShowDialog();form1.Disponse();
      

  3.   

    .Net的WinForm编程和其他语言(比如VB6)有一个区别,就是主窗口关闭时会导致程序退出,
    ========
    这是由于main方法执行完了才退出的啊,不是什么“导致”啊,可以直接吧application.run中间的new form1去掉。
      

  4.   

    你说的那个hide我不想那样用.站内存啊。
    至于
    为什么我想关闭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我也不想要这样的效果啊。
      

  5.   

    注意,我下面例子中的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);
                
                
            }
        }
      

  6.   

    Form1 ooo = new Form1();
    ooo.Show();
    this.Close();
      

  7.   

    不需要这样吧form1.Hide();
    Form2 demo=New Form2();
    demo.ShowDialog();form1.Disponse();
    我想问一下.清理正在使用的资源.那个form1.hide是关闭了,还是在隐藏.
    占不占系统资源。
      

  8.   

    ApplicationContext这个类是什么意思.起什么作用啊。
      

  9.   

    可以使用 ApplicationContext 类重定义导致消息循环退出的环境。默认情况下,ApplicationContext 侦听应用程序主 Form 上的 Closed,然后退出线程的消息循环。
    这是MSDN说的
    下面是我说的
    如果ApplicationContext的主Form在Closed前被替换掉的话,那么它就不会因为原来主Form的关闭而退出程序,而去继续侦听新的主Form的Closed,以此循环,至到它所临控的最新的主Form发生Closed时才退出线程的消息循环.
      

  10.   

    if(Form2==打开)<----布尔值
    {
    Application.Run(new Form2());
    }
    else
    {
    Application.Run(new Form1());
    }