2013年5月23日 星期四

在Windows Form 中加入事件與事件解析

本文參考於http://www.dotblogs.com.tw/hung-chin/archive/2011/10/01/38490.aspx
我們在程式執行時會先去執行Program.cs 裡面 Main這一段{}
去呼叫第一個啟動的form

這範例的啟動表單就叫BaseForm

static void Main()
 {
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new BaseForm());
 }

接著會執行表單內的這一段 public 加上表單名稱,從InitializeComponent();初始化動作新增我們要的事件 我們加入Form的FormClosing事件
這事件用於 視窗關閉時 觸發!  請看在BaseForm.Designer.cs檔案中的
private void InitializeComponent(){加入事件} 範例如下
       

 private void InitializeComponent()
  {
        //在InitializeComponent()中還有許多要初始化的原件
        //直接添入下面那一行即可
        FormClosing += new System.Windows.Forms.FormClosingEventHandler
                                                                         (this.Frm_Main_FormClosing);
  }


再來解說 註冊FormClosing他的驅動原理
首先第一句FormClosing 他是一個發生於表單關閉之前會觸發的事件。
而需要注意的是他的語法中public event FormClosingEventHandler FormClosing
FormClosingEventHandler剛好是我們接下來要解釋的委派
如果忘記委派請往前翻 趕快看看如何使用吧
委派到哪裡去呢? Forms.FormClosingEventHandler (this.Frm_Main_FormClosing);
委派到Form.cs檔案中的 Frm_Main_FormClosing程式區塊中
長這樣 如下
 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)
        {

         }

再回到委派FormClosingEventHandler中的語法來解析
public delegate void FormClosingEventHandler
(
  Object sender,
  FormClosingEventArgs e
)

當按下關閉時會觸發裡面有兩個參數
       sender = {WindowsFormsApplication5.Form1, Text: Form1}
而            e = {System.Windows.Forms.FormClosingEventArgs}


看到FormClosingEventArgs 類別 順便一提 等等要解釋的屬性
FormClosingEventArgs.Cancel取得或設定值,這個值表示是否應該取消事件。
如果應該要取消事件則為 true,否則為 false

再來我們看一下Form.cs檔案中的 Frm_Main_FormClosing程式區塊中
的實際應用吧!
private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)
{
/*
if (e.CloseReason != CloseReason.WindowsShutDown)
{
if (MessageBox.Show("是否確定要關閉程式", "關閉程式", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
}
*/


if (MessageBox.Show("你剛按關閉對吧!", "關閉程式", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;//如果選擇no取消這事件 不關閉視窗
//e=FormClosingEventArgs.Cancel=true

}
//Environment.Exit(0);//強行關閉視窗
}







在這之後 還有許多Form的事件可以用
可以參考msdn中的
Windows Form 中事件的順序

沒有留言:

張貼留言