不同按钮去触发事件时传入需要参数的子程序该怎么设计
不同按钮去触发事件时传入需要参数的子程序该如何设计
大家好 小弟我今天写code 的时候 突然碰到这个问题 不晓得如何着手
请各位大大赐教
以下是我的code:
大概是想实现这样的想法 但Addressof 这行的语法 不允许我传入参数
请问这里该如何设计 才能实现我的想法呢?
------解决方案--------------------
你在问题中没有说清楚需求,这里才说明白。
如果要精炼你的程序,也就是你懒得写两个自定义方法,那么你应该使用 Lamda 表达方式:
这用于自动产生 (s,a) 签名的匿名委托,并且自动产生方法体(调用不同参数)。
------解决方案--------------------
当然有更简洁的方法,比如Lambda:
或者利用事件源,将参数储存在Tag中:
灵活性足以保证,但性能就要差一点。是否需要牺牲一些性能换取灵活性,你自己权衡吧。
至于可读性,VS是有折叠代码的功能的,另外请善用#Region
------解决方案--------------------
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
btn_Start_X.name="Tom"
btn_Start_Y.name="Mark"
AddHandler btn_Start_X.Click,AddressOf definit()
AddHandler btn_Start_Y.Click,AddressOf definit()
End Sub
Private Sub definit(ByVal sender As System.Object, ByVal e As System.EventArgs)
Messagbox.show( CType(sender, Button).Name)
End Sub
这样写更利于编程,如果觉得用name不方便,你可以重载button 加个参数
大家好 小弟我今天写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 这行的语法 不允许我传入参数
请问这里该如何设计 才能实现我的想法呢?
------解决方案--------------------
你在问题中没有说清楚需求,这里才说明白。
如果要精炼你的程序,也就是你懒得写两个自定义方法,那么你应该使用 Lamda 表达方式:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler YourButton1.Click, Sub(s, a)
Process("A")
End Sub
AddHandler YourButton2.Click, Sub(s, a)
Process("B")
End Sub
End Sub
这用于自动产生 (s,a) 签名的匿名委托,并且自动产生方法体(调用不同参数)。
------解决方案--------------------
当然有更简洁的方法,比如Lambda:
AddHandler btn_Start_X.Click, Sub(__, ___) definit("Tom")
或者利用事件源,将参数储存在Tag中:
Private Sub Button_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click, Button2.Click
Messagbox.show(CType(sender, Button).Tag + "你好")
End Sub
灵活性足以保证,但性能就要差一点。是否需要牺牲一些性能换取灵活性,你自己权衡吧。
至于可读性,VS是有折叠代码的功能的,另外请善用#Region
------解决方案--------------------
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
btn_Start_X.name="Tom"
btn_Start_Y.name="Mark"
AddHandler btn_Start_X.Click,AddressOf definit()
AddHandler btn_Start_Y.Click,AddressOf definit()
End Sub
Private Sub definit(ByVal sender As System.Object, ByVal e As System.EventArgs)
Messagbox.show( CType(sender, Button).Name)
End Sub
这样写更利于编程,如果觉得用name不方便,你可以重载button 加个参数