最初我的程序结构是这样的:主程序打开一个MDI窗口(A窗口),MDI窗口的菜单里有登录等菜单,通过菜单调用登录窗口(B窗口)。
想修改成为:主程序直接打开登录窗口(B窗口),密码正确后,再打开MDI窗口(A窗口)。
现在的问题是:登录后 ,MDI窗口显示一下,就自动关闭了,这是什么原因?窗口调用 语句为:a.show();

解决方案 »

  1.   

    最初我的程序结构是这样的:主程序打开一个MDI窗口(A窗口),MDI窗口的菜单里有登录等菜单,通过菜单调用登录窗口(B窗口)。
    想修改成为:主程序直接打开登录窗口(B窗口),密码正确后,再打开MDI窗口(A窗口)。
    现在的问题是:登录后 ,MDI窗口显示一下,就自动关闭了,这是什么原因?窗口调用 语句为:a.show();
      

  2.   

    我找到问题的原因了:登录窗口(B窗口)不关闭,则MDI窗口(A窗口)也不关闭。可能因为登录窗口(B窗口)是主窗口的原因。
    但我不知道怎么处理。
      

  3.   

    人家说的明显是WinForm
    不是WebForm
    楼上的都怎么看帖的……登录窗口hide一下
    不要关闭
    试试
      

  4.   

    将b窗口隐藏即可,不需要关闭。b.hide,
      

  5.   

    与浏览器无关,即使关掉浏览器也是一样的。盼大侠来帮忙。
    登录窗口(B窗口)不关闭,则MDI窗口(A窗口)也不关闭。
    ==========================
    程序入口:
    static void Main() 
    {
    Application.Run(new B());
    }
    ==========================
    显示MDI窗口(A窗口)
    A.SHOW();
    ==========================
      

  6.   

    hide没问题,会达到想要的结果,个人认为这样不太完美,窗口克服缺点隐藏了,但仍然占用资源,不知对否。
      

  7.   

    hide没问题,会达到想要的结果,个人认为这样不太完美,窗口虽然隐藏了,但仍然占用系统资源,不知对否。:)
    打错字了
      

  8.   

    a.show应该放在登陆后创建a,然后a.show,等a关闭后调用Application.exit这样就好了,你的做法是主线程都结束了还怎么能显示a呢,除非是a.showdialog,这样还可以,但是这样做会使mdi出现其他问题。
      

  9.   

    你在登陆以后,使用了B.close(),这样将导致Application终止,所以A也就关了
    正确的做法是
    static void Main() 
    {
    Application.Run(new A());
    }然后在A窗口的InitializeComponent();函数之前执行B.show(),如果密码不正确,
    不执行A的InitializeComponent()函数,这样就可以B.close()了
      

  10.   

    我刚才指的楼上是:w_k_(BarDy) ( 二级(初级),没想到这么多人这么快回贴,真是感动啊。谢谢啦。
      

  11.   

    a这个文件是在项目里设计的。
    实例化是在b中,代码如下: System.Windows.Forms.Form a=new a();
    a.Show();
      

  12.   

    static void Main() 
    {
        new A().Show();    if(new B().ShowDialog() == DialogResult.OK)
        
        Application.Run();
    }在 A_Closed() 事件中 加入 Applicatio.Exit()
      

  13.   

    上面的代码有问题,我只是想说明一点如果用 Application.Run(new Form1()); 这个形式启动程序,当 Form1 被关闭时,系统会认为该程序运行完毕,不需要在使用消息循环,程序也就被关闭了。用 Application.Run(); 则消息循环一直被系统所接受,直到调用 Application.Exit() 方法,系统才会认为该程序结束。所以当时用 Application.Run() 时,千万不要忘记使用 Application.Exit() 方法。上面的启动可以改为:static void Main() 
    {
        if(new B().ShowDialog() == DialogResult.OK) Application.Run(new A());}