作者yauhh (姚呵呵)
看板Visual_Basic
标题Re: [.NET] 如何触发两个form的button
时间Sun May 25 00:53:40 2008
※ 引述《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)