日期:2014-05-18  浏览次数:20675 次

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

在执行close和dispose的时候,把旧窗体也关掉了,请问是为什么?谢谢

------解决方案--------------------
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());
}
}

------解决方案--------------------
线程问题:
第一,程序中有一个主线程,如果主线程被关闭,则所有的对象将被关闭,而主线程一般就是启动的对象.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,则不做什么动作(否通过的话),否则就关才主程线。