看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《felixlin (享受痛苦)》之銘言: : 現在有 form A 和 form B : 我想要按下A中的buttonA後 : 其效果等於B中的buttonB : ex : (in form_A) : public sub button_A.Click(byval sender .... byval e ....) ..... : form_B.buttonB.click(sender,e) : end sub : 以上並沒有觸發buttonB.click : 不知道有沒有先進能幫我解決這問題 : thank you :P 唔,好難做... 我找到一個方法是: 先看被動方 Form2, 寫成如下面的程式 Public Class Form2 Public Event b1(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click, Me.b1 Console.WriteLine("hey") Me.Button1.BackColor = Color.Red End Sub Public Sub b1_raiser(ByVal sender As System.Object, _ ByVal e As System.EventArgs) RaiseEvent b1(sender, e) End Sub End Class Button1_Click是private, 於是額外設計一個event叫b1, 由b1_raiser觸發事件, 並由Button1_Click處理b1事件(見黃色部份). 注意事件b1與觸發器b1_raiser的參數,都與Button1_Click一樣,才能讓 一個Button1_Click既處理Button1.Click,也處理b1. 於是,Form2對外有個b1事件,並有b1_raiser程序為觸發器. 接下來,輪到Form1了,Form1要知道怎麼觸發Form2.b1事件. 觸發事件必須把 sender 跟 e 參數都帶過去,因 Form1.Button1 與 Form2.Button1 參數相同,直接帶過去即可. Public Class Form1 'Dim WithEvents f2 As New Form2 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click 'f2.b1_raiser(sender, e) My.Forms.Form2.b1_raiser(sender, e) End Sub End Class 注意灰色註解處,雖然可以叫出 Form2.Button1 的工作, 但由前面 Form2.Button1 一行塗底色為紅色的程式,可以看出 在此若使用WithEvents,一點鳥用都沒有. 雖然可以做出相同的動作,但由f2觸發Form2.b1事件是借用另一個實體. 而透過 My.Froms.Form2.b1_raiser 觸發 Form2.b1 看起來顯然漂亮多了. 你所要寫的程式大約是如此: Form1_Button1先做一些自己的工作,然後叫起 Form2 的 Button1_Click 所處理的 事件; Form2_Button1也先做一些自己的工作,然後叫起 Form1 的 Button1_Click 所處理的事件. 不過以上流程看起來是遞迴的,還要再透過參數 sender 判斷按的是哪個按鈕, 避免反覆進行工作. 參考資料: WithEvents範例碼 http://msdn.microsoft.com/en-us/library/stf7ebaz(VS.80).aspx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.227.70 ※ 編輯: yauhh 來自: 59.112.227.70 (05/25 00:55)