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

MaNong_plf 2014-12-01 03:24:27
winform在主窗体有一排按钮,其中有个按钮是登录窗口按钮,在点击登录按钮后弹出一个窗体A,在对A窗体进行信息填写后,点击A窗体上确认按钮进入窗体B,与此同时关闭窗体A,然后又得在B窗体上填写完信息后,点击确认进入窗体C,再关闭窗体B。。。在用this.Close()和this.Hide()方法时,出现的效果不是很理想(因为假如窗体B弹出时,窗体A时隐藏了,但是窗体B不是直接弹出来的,而是直接缩小化在电脑标题栏下面,还需要点击一下进行查看)。所以请高手指教该怎么做,本人菜鸟一枚。
...全文
965 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmileSkyNet 2015-01-02
  • 打赏
  • 举报
回复
有一个办法解决你用Panel的问题,BrintToFront();
MaNong_plf 2014-12-18
  • 打赏
  • 举报
回复
引用 15 楼 xdashewan 的回复:
[quote=引用 14 楼 u014083929 的回复:] 我知道可以隐藏,但是在VS2010上 布局的时候 你能像DIV一样隐藏吗? 所以麻烦。tabcontrol控件可以当DIV一样的使用吗?
点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B,不能先关闭B,然后自动从A上打开C吗,为何一定要先开C再关B[/quote] 主要就是本人也就是个菜鸟。。。不过现在问题解决了。我的用的是多个panel控件来做的。。。就跟使用div一样来切换隐藏和显示。谢谢以上各位好友的帮忙。以后有什么不懂的地方。我的会在论坛向大家指教。
MaNong_plf 2014-12-17
  • 打赏
  • 举报
回复
我的现在就是用多个panel来使用的 不过panel控件不像div一样 设置了隐藏就看不见了。。。panel控件就一层层叠在一起,特别不好操作,只能用那个 文档大纲 来进行操作控件,我的一个菜鸟遇到这些问题也是醉了。对了,如果回答的好,怎么把分数给人家啊?我的也不会呢!
xdashewan 2014-12-17
  • 打赏
  • 举报
回复
引用 14 楼 u014083929 的回复:
我知道可以隐藏,但是在VS2010上 布局的时候 你能像DIV一样隐藏吗? 所以麻烦。tabcontrol控件可以当DIV一样的使用吗?
点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B,不能先关闭B,然后自动从A上打开C吗,为何一定要先开C再关B
MaNong_plf 2014-12-17
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
panel可以隐藏啊,谁告诉你不能隐藏的 不过你最好还是换成tabcontrol之类的控件,否则布局起来相当麻烦,而且设计阶段看到的和运行阶段看到的会不一致 想给分,点结贴
我知道可以隐藏,但是在VS2010上 布局的时候 你能像DIV一样隐藏吗? 所以麻烦。tabcontrol控件可以当DIV一样的使用吗?
於黾 2014-12-17
  • 打赏
  • 举报
回复
panel可以隐藏啊,谁告诉你不能隐藏的 不过你最好还是换成tabcontrol之类的控件,否则布局起来相当麻烦,而且设计阶段看到的和运行阶段看到的会不一致 想给分,点结贴
MaNong_plf 2014-12-12
  • 打赏
  • 举报
回复
程序在启动时主窗体是一个主界面类似一个自动取款机的主页,这个主页(也就是主窗体)是不能被关闭的,只有在这个这个主窗体上通过点击按钮进行其他弹窗的操作,这些个弹窗都是链式的,一个套着一个,所以在关闭时就出现问题了。比如主窗体A是不能被关闭的,主窗体上有个按钮,通过点击按钮弹出窗体B,窗体B填写完信息后,弹出窗体C,此时关闭窗体B,而不是去关闭主窗体A,也就是在点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B;如果用this.Close()和this.Hide()的话。这个效果可以达到,主要就是,在关闭的同时,窗体C是最小化显示在电脑标题栏下面的,还要点击一下最大化才能出来,更关键的时退出整个窗体B、C回到主窗体A时,主窗体A也是跟最小化显示一样隐藏掉了。也得点击一下才能出来。所以效果特别差,如果是放在一体机上用触摸屏点击,根本没有用。主要就是不能让窗体缩小化和隐藏。
SmileSkyNet 2014-12-12
  • 打赏
  • 举报
回复
如果你还要回到A的话,就只能用this.Hide(); 给你一个解决办法,你这个类似于向导类应用。 可以在一个窗体中放几个panel,每次要显示下一个panel时用panel.BringToFront()
冬夜 2014-12-02
  • 打赏
  • 举报
回复
Login 页面 登录成功 后 //登录成功 DialogResult = DialogResult.OK;
冬夜 2014-12-02
  • 打赏
  • 举报
回复

    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());
        }
    }
我就是这么干的
phommy 2014-12-01
  • 打赏
  • 举报
回复
点A的确定按钮时: Application.OpenForms[0].BeginInvoke((Action)(() => new B().ShowDialog())); Close();
youzelin 2014-12-01
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
当然是登陆窗体打开主窗体的时候使用Application.Run了 本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了 使用Application.Run(new Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在 当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在
我就是在怀疑他没有这么干!我怀疑他把描述中的第一个启动的窗体放到了 Run 里面!
於黾 2014-12-01
  • 打赏
  • 举报
回复
当然是登陆窗体打开主窗体的时候使用Application.Run了 本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了 使用Application.Run(new Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在 当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在
youzelin 2014-12-01
  • 打赏
  • 举报
回复
问题的关键就是你拿什么作为主窗体 主窗体才能 Application.Run(new ??); 你如果只是 Application.Run(new FirstWindow()); 那你是自己给自己下套。
於黾 2014-12-01
  • 打赏
  • 举报
回复
或者登陆窗体不要隐藏,直接退出 打开主窗体用Application.Run(new Mainform()); 这样两个窗体就不是同一个线程了,不会因为登陆窗体关闭导致弹出的窗体也关闭
於黾 2014-12-01
  • 打赏
  • 举报
回复
你可以把那些BCDE什么的都弄成MDI子窗体,嵌入主窗体中,都最大化显示,这样就不用老纠结这个弹出那个必须关闭什么的
zhanglong19891129 2014-12-01
  • 打赏
  • 举报
回复
Appcation.exit(this)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧