当前位置: 代码迷 >> C# >> winform怎么在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的
  详细解决方案

winform怎么在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的

热度:497   发布时间:2016-05-05 05:27:20.0
winform如何在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的?
winform在主窗体有一排按钮,其中有个按钮是登录窗口按钮,在点击登录按钮后弹出一个窗体A,在对A窗体进行信息填写后,点击A窗体上确认按钮进入窗体B,与此同时关闭窗体A,然后又得在B窗体上填写完信息后,点击确认进入窗体C,再关闭窗体B。。。在用this.Close()和this.Hide()方法时,出现的效果不是很理想(因为假如窗体B弹出时,窗体A时隐藏了,但是窗体B不是直接弹出来的,而是直接缩小化在电脑标题栏下面,还需要点击一下进行查看)。所以请高手指教该怎么做,本人菜鸟一枚。

------解决思路----------------------
Appcation.exit(this)
------解决思路----------------------
你可以把那些BCDE什么的都弄成MDI子窗体,嵌入主窗体中,都最大化显示,这样就不用老纠结这个弹出那个必须关闭什么的
------解决思路----------------------
或者登陆窗体不要隐藏,直接退出
打开主窗体用Application.Run(new Mainform());
这样两个窗体就不是同一个线程了,不会因为登陆窗体关闭导致弹出的窗体也关闭
------解决思路----------------------
问题的关键就是你拿什么作为主窗体
主窗体才能 Application.Run(new  ??);
你如果只是 Application.Run(new  FirstWindow()); 那你是自己给自己下套。
------解决思路----------------------
当然是登陆窗体打开主窗体的时候使用Application.Run了
本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了
使用Application.Run(new Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在

当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在
------解决思路----------------------
引用:
当然是登陆窗体打开主窗体的时候使用Application.Run了
本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了
使用Application.Run(new Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在

当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在

我就是在怀疑他没有这么干!我怀疑他把描述中的第一个启动的窗体放到了 Run 里面!
------解决思路----------------------
点A的确定按钮时:

Application.OpenForms[0].BeginInvoke((Action)(() => new B().ShowDialog()));
Close();

------解决思路----------------------

    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Login login = new Login();
          //  FrmMain login = new FrmMain();
            DialogResult loginDr = login.ShowDialog();
            if (loginDr != DialogResult.OK)
                return; //结束程序
            Application.Run(new FrmMain());
        }
    }


我就是这么干的 
------解决思路----------------------
Login 页面    登录成功 后  
   //登录成功
                DialogResult = DialogResult.OK;
------解决思路----------------------
如果你还要回到A的话,就只能用this.Hide();
给你一个解决办法,你这个类似于向导类应用。
可以在一个窗体中放几个panel,每次要显示下一个panel时用panel.BringToFront()
------解决思路----------------------
panel可以隐藏啊,谁告诉你不能隐藏的
不过你最好还是换成tabcontrol之类的控件,否则布局起来相当麻烦,而且设计阶段看到的和运行阶段看到的会不一致

想给分,点结贴
------解决思路----------------------
引用:
我知道可以隐藏,但是在VS2010上 布局的时候 你能像DIV一样隐藏吗?
所以麻烦。tabcontrol控件可以当DIV一样的使用吗?

点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B,不能先关闭B,然后自动从A上打开C吗,为何一定要先开C再关B
  相关解决方案