这几天用到一个小游戏修改器,很小的程序,就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即可。
又大功告成了。。。。。(为什么要说又)