WINFORM,代码如下:
                MessageBox.Show("登陆成功");
                MainForm myMainForm = new MainForm();
                myMainForm.Owner = this;
                myMainForm.StartPosition = FormStartPosition.CenterScreen;
                myMainForm.Show();
                this.Close();
                this.Dispose();在执行close和dispose的时候,把旧窗体也关掉了,请问是为什么?谢谢

解决方案 »

  1.   

    myMainForm.Show();改成:Application.Run(myMainForm);
      

  2.   

    application.run出错呀,之前在progrm.cs里在已经RUN过一次报错如下:
    在单个线程上开始另一个消息循环是无效操作。请改用 Form.ShowDialog。
      

  3.   

    Main函数是这样声明的吗?[STAThread]
    static void Main()
    {
    ...
    }
      

  4.   

    winform不太熟悉
    不知道这样可以么?                myMainForm.Close();
                    myMainForm.Dispose();
      

  5.   

    to hbxtlhx:不是这样子的,是窗体,不是控制台to jimu8130:我是要打开WINDOW,然后关闭原来的,不是关闭新的
      

  6.   

    Sorry!使用Application.Run只能是在线程中启动,在主线程中是不可以。
    你可以在Main函数中使用ShowDialog显示第一个窗体,然后可以使用Run显示主窗体。类似如下:[STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false); Form1 f = new Form1();
    if (f.ShowDialog() == DialogResult.OK)
    {
    Application.Run(new Form1());
    }
    }
      

  7.   

    线程问题:
    第一,程序中有一个主线程,如果主线程被关闭,则所有的对象将被关闭,而主线程一般就是启动的对象.Application.Run(A窗体),A窗体就会就是主线程对象.
    第二,你的这种做法可以换另一个种思路,并且可以实现反复登陆.
    1.假设A这主窗体,B为登陆登陆窗体,启动中设为A窗体,Application.Run(A窗体).在A窗体的Load事件中加载B窗体(有模式),方法ShowDialog(),而该方法返回对象是DialogResult(DialogResult对象是枚举类型,包括Yes、No、OK等),如果验证通过则Yes,否则No,在A窗体中判断B窗体的返回值是Yes还是No,如果是Yes,则不做什么动作(否通过的话),否则就关才主程线。