原文地址:
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
漂漂 閱讀(3453)
評論(0) 編輯 收藏 引用 所屬分類:
c#開發