none
想問個學事件處理器時產生的疑惑 RRS feed

  • 問題

  • 使用事件處理器如eventhandler時 配合的方法要有兩個參數 object sender與EventArgs e

    我感到很疑惑 因為這兩個參數我沒宣告過

    甚至在指派時 如button1.Click += this.sayHello; 也沒有填入這兩個參數帶入的物件

    照理說方法有參數時 不是要在呼叫時給該有的參數嗎?

    讓我更不解的是在沒宣告 也沒在呼叫時填參數的情況下

    直接在該方法使用這兩個物件 居然有抓到東西而且是正確的物件 如以下代碼

    private void sayHello(object sender, EventArgs e)
            {
                MessageBox.Show("121");
               Console.WriteLine((sender as Button).ToString());
                Console.WriteLine(e.ToString());
            }

    所以想請問是否有人知道背後運作的原理

    1.為何帶兩個參數的方法卻能在呼叫時不用給參數也能呼叫

    2.沒宣告也沒給參數的兩個物件為何存在並能使用 系統是如何知道這兩個參數到底是什麼 從何而來?

    感謝

    2016年11月26日 下午 01:42

解答

  • 以下只是簡略的說明

    1、在 Button 控制項裡面有個EventHandler  Click ,外部可以將寫好的方法委派給他。

    2、在 Button 按下後會執行 OnClick 事件

    3、在 OnClick 中把 this 跟 e 傳入 handler ,這邊 handler 就是剛剛指派給 Click 的 sayHello,並執行。

    • 已標示為解答 GREZOD 2016年11月27日 上午 05:15
    2016年11月26日 下午 03:13
  • 這裡就有你要的答案了。

    https://msdn.microsoft.com/en-us/library/orm-9780596521066-01-17.aspx


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 GREZOD 2016年11月27日 上午 05:15
    2016年11月26日 下午 03:25
    版主
  • 學事件要先懂委派, 除了上述小朱給的參考外,

    也可以看看以下這個

    委派 (C# 程式設計手冊)
    事件 (C# 程式設計手冊)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年11月27日 上午 02:15
    版主

所有回覆

  • 以下只是簡略的說明

    1、在 Button 控制項裡面有個EventHandler  Click ,外部可以將寫好的方法委派給他。

    2、在 Button 按下後會執行 OnClick 事件

    3、在 OnClick 中把 this 跟 e 傳入 handler ,這邊 handler 就是剛剛指派給 Click 的 sayHello,並執行。

    • 已標示為解答 GREZOD 2016年11月27日 上午 05:15
    2016年11月26日 下午 03:13
  • 這裡就有你要的答案了。

    https://msdn.microsoft.com/en-us/library/orm-9780596521066-01-17.aspx


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 GREZOD 2016年11月27日 上午 05:15
    2016年11月26日 下午 03:25
    版主
  • 學事件要先懂委派, 除了上述小朱給的參考外,

    也可以看看以下這個

    委派 (C# 程式設計手冊)
    事件 (C# 程式設計手冊)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2016年11月27日 上午 02:15
    版主

  • 目前初步的理解為 事件觸發時會執行事件內的代碼 如peter大舉例中的onClick

    由事件內的代碼呼叫委派的方法並給予參數

    詳細的部分再研究一下 小朱大跟bill大給的參考資料

    感謝三位高手慷慨解答

    2016年11月27日 上午 05:32