none
不同按鈕去觸發事件時傳入需要參數的副程式該如何設計 RRS feed

  • 問題

  • 大家好 小弟我今天寫code 的時候 突然碰到這個問題 不曉得如何著手

    請各位大大賜教

    以下是我的code:

     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    
         AddHandler btn_Start_X.Click,AddressOf definit("Tom")
         AddHandler btn_Start_Y.Click,AddressOf definit("Mark")     
    
        End Sub
    
    
    Sub definit(ByVal name as string)
    
    Messagbox.show(name & "你好")
    
    end Sub

    大概是想實現這樣的想法 但Addressof 這行的語法 不允許我傳入參數

    請問這裡該如何設計 才能實現我的想法呢?

    2014年7月25日 上午 09:29

解答

  • 您好,

    依您原本的做法,把Button的資訊記錄到Button的Tag屬性之中,然後在事件處理函式中,從 sender 取得 button,後取它的Tag值,類似如下,

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	'先把Button要記錄的資訊寫到Button的Tag屬性之中
    	btn_Start_X.Tag = "Tom"
    	btn_Start_Y.Tag = "Mark"
    	AddHandler btn_Start_X.Click, AddressOf ButtonClick
    	AddHandler btn_Start_Y.Click, AddressOf ButtonClick
    End Sub
    
    Private Sub ButtonClick(sender As Object, e As EventArgs)
    	Dim clickBtn As Button = TryCast(sender, Button)
    	If Not IsNothing(clickBtn) Then
    		MessageBox.Show(clickBtn.Tag & "你好")
    	End If
    End Sub


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 向恩 2014年7月27日 上午 01:28
    2014年7月26日 上午 09:51

所有回覆

  • Click 事件有固定的參數,你這樣當然不行,而且它是傳入函數名稱。

    你想做,可以在事件處理常式中先取得呼叫者是誰,再判斷要做什麼。


    強力監督SQL Injection問題!!

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

    • 已提議為解答 Alex_Lee 2014年7月25日 下午 04:23
    2014年7月25日 上午 10:21
    版主
  • 您好,

    您可以參考「Getting control name for an event


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年7月25日 下午 03:12
  • 要如何在事件處理常式中知道呼叫者是誰呢?
    • 已編輯 向恩 2014年7月26日 上午 06:38
    2014年7月26日 上午 06:38
  • 您要用RaiseEvent引發事件, 再傳入參數

    2014年7月26日 上午 07:10
  • 請問具體的代碼怎麼寫 我想了好久還是沒靈感...
    2014年7月26日 上午 09:27
  • 您好,

    依您原本的做法,把Button的資訊記錄到Button的Tag屬性之中,然後在事件處理函式中,從 sender 取得 button,後取它的Tag值,類似如下,

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	'先把Button要記錄的資訊寫到Button的Tag屬性之中
    	btn_Start_X.Tag = "Tom"
    	btn_Start_Y.Tag = "Mark"
    	AddHandler btn_Start_X.Click, AddressOf ButtonClick
    	AddHandler btn_Start_Y.Click, AddressOf ButtonClick
    End Sub
    
    Private Sub ButtonClick(sender As Object, e As EventArgs)
    	Dim clickBtn As Button = TryCast(sender, Button)
    	If Not IsNothing(clickBtn) Then
    		MessageBox.Show(clickBtn.Tag & "你好")
    	End If
    End Sub


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 向恩 2014年7月27日 上午 01:28
    2014年7月26日 上午 09:51
  • Form_Load 阿...

    物件說不定還沒完成初始化哩~


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年7月27日 下午 02:29