原文地址:
http://www.84ren.com/read.php?tid-31409.html大家好 我是GIS理想 当我们做C#开发的时候 也就是说只要是应用程序开发的时候 有一个问题是要经常遇到的 就是当我们点击打开新窗口的问题 如何判断窗口已经打开了 因为如果不做判断的话 明显会出现问题 :每点击一次 就会加载一个相同的窗口 这个是不对的
一般我们打开一个新窗口是这样的:
Private void button_Click(object sender,EventArgs e)
{
Frm frm=new Frm();
Frm.show();
}
这个是经常要用到的 呵呵 尤其是我这样的新手 。。。。。。
很明显 这样每点击一次 都会出来一个新的Frm窗体的 那么怎么判断当前的窗体已经加载呢
方法一 用window api(没用这里过 不敢妄言)
方法二 先实例化一个窗体,然后在点击事件里让它显示 如下:
Frm frm= new Frm();
private void pictureBox2_Click(object sender, EventArgs e)
{
if (!frm.Created)
{
f = new Frm();
f.Show();
}
}
很明显 这个貌似能实现只出来一次 但是随之而来的问题是 事先就实例化了这个窗体 这在代码编写里是不好的习惯
要是有很多的窗体的话 加载程序的时候就很占系统资源了 所以这样的写法也不可取
方法三 声明一个窗体变量 然后动态的创建并显示
其实这个方法来自于第二个方法的思路 认真分析一下第二个方法可以看到 之所以不可取是因为在声明的时候直接实例化了 那么我们不实例化它 只声明一个窗体变量 不就行了么?
是的 例子代码如下:
//这句放在窗体的初始化的地方 不是点击事件里最佳addPlaceMark是窗体的name
private addPlaceMark addplacemark;
//下面的放在弹出窗体的点击事件里即可
if (addplacemark == null || addplacemark.IsDisposed)
{
addplacemark = new addPlaceMark();
addplacemark.Show();
}
else
{
addplacemark.WindowState = FormWindowState.Normal;
addplacemark.Activate();
addplacemark.Show();
}
这样就可以了 效果很好 呵呵
好了 总结完毕 搁笔收工
ps:
应用程序启动与关闭事件 Form 和 Control 类和应用程序启动与关闭有关的时间。
当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:
System.Windows.Forms.Control.HandleCreated
System.Windows.Forms.Control.BindingContextChanged
System.Windows.Forms.Form.Load
System.Windows.Forms.Control.VisibleChanged
System.Windows.Forms.Form.Activated
System.Windows.Forms.Form.Shown
当应用程序关闭时,会以下列顺序引发主要表单的关闭事件:
System.Windows.Forms.Form.Closing
System.Windows.Forms.Form.FormClosing
System.Windows.Forms.Form.Closed
System.Windows.Forms.Form.FormClosed
System.Windows.Forms.Form.Deactivate
posted on 2010-08-29 22:46
漂漂 阅读(3386)
评论(0) 编辑 收藏 引用 所属分类:
c#开发