关于窗体切换显示的东东

这几天用到一个小游戏修改器,很小的程序,就2窗口,我发现了一个有趣的东西:点击默认窗体上某按钮,默认窗体消失,出现新窗体操作。点击新窗体上保存确认按钮,新窗体关闭,出现默认窗体。我就琢磨怎么在C#里实现这个效果。
 
我先建立2个窗体:form1和form2,其中form1是程序启动的默认显示窗体,form2是隐藏窗体,通过点击form1上某按钮给显示出来。
 
我先这么写代码:
//点击form1上button1隐藏form1,显示form2

             private void button1_Click( object sender, EventArgs e)
             {
                     this.Hide();
                     Form2 fm2= new Form2(0;
                     fm2.Show();
             }
//关闭fomr2,显示form1

             private void showfm1( object sender, FormClosingEventArgs e)
             {
                     Form1 fm1 = new Form1();
                     fm1.Show();
             }
 
试了下,嘿嘿,果然切换自如。
 
不过在关闭程序时候出问题了,关了form1,程序还在后台运行,vs也还是debug模式没切换回代码编辑模式,看样子有问题。
 
自己分析了一下确实也是有问题,form1被隐藏掉之后,每次关闭form2又重新生成一次form1,难怪程序无法终止,看样子又要请教高手了。
 
高手教了一招,将form1的句柄传入form2,在form2关闭时候判断form1是否存在,如果存在就显示它:
//form1 code

             private void button1_Click( object sender, EventArgs e)
             {
                     this.Hide();
                     Form frm = new Form2( this);
                     frm.Show();
             }
//form2 code
             private Form m_frm;
             public Form2(Form frm)
             {
                     InitializeComponent();
                     m_frm = frm;
             }

             private void showfm1( object sender, FormClosingEventArgs e)
             {
                     if (m_frm != null)
                     {
                             m_frm.Show();
                     }
             }
 
这下好了,再怎么显示关闭form2,也不会出现form1无法正常关闭的事了。但是我又发现一个问题:如果拖动form1的位置,则form2的显示位置还是在默认位置,不是form1隐藏时候的位置。
 
还好这个问题自己就能解决:
                 private void button1_Click( object sender, EventArgs e)
                {
                         this.Hide();
                        Form frm = new Form2( this);
                         //定义新窗体使用当前窗体的坐标
                        frm.SetDesktopLocation( this.DesktopLocation.X, this.DesktopLocation.Y);
                        frm.Show();
                }
然后将form2的StartPosition设置为Manual即可。
 
又大功告成了。。。。。(为什么要说又)

你可能感兴趣的:(C#,职场,窗体,休闲)