当我从子例程调用预先存在的事件处理程序时,它不会返回。 VB

时间:2013-09-11 13:35:35

标签: vb.net events controls

我正在寻找从form_Load事件处理程序调用预先存在的事件处理程序子例程。 但是下面没有用,因为控制没有回来,我想做更多。

更新
我是新手,所以我不知道合适的协议是什么,但......  不返回的原因是像下面这样的语句结束了子程序的执行。

If aLabel.Tag = 1...

修复是在声明中添加New来创建它的实例,即.. 改变....
Dim aLabel As Label
 ......到...... Dim aLabel As New Label

我很惊讶我没有得到警告,但他们突然停止执行潜艇。那不是很有帮助:) 再次感谢您的时间... ... (也许这个问题应该被删除,因为它已经达到了目的) @konrad @karl

END OF UPDATE

什么行不通......

Private Sub Form1_Load...

button1_Click(sender, e)    'But Control doesn't come back.

end sub

我是否将sender改为某事? 提前谢谢你  戴夫

1 个答案:

答案 0 :(得分:2)

调用这样的事件处理程序是个坏主意,因为您试图通过使sender和/或EventArgs成为其他事件来模拟事件上下文。

相反,将要调用的逻辑放入SubroutineFunction并调用Form1_Load方法;同样,如果你真的有一个真正的点击事件处理程序,那么该处理程序代码也可以调用该方法,如下所示:

Private Sub Form1_Load()
    DoSomeWork()
End Sub

Protected Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    DoSomeWork()
End Sub

Private Sub DoSomeWork()
    ' Put logic here that you want to do from form load and a button click
End Sub

这样做的好处是使代码更清晰,更清晰,更易于维护,因为您只需要在需要更改逻辑时在一个地方更改逻辑。

注意:显然,如果需要,您可以将参数传递给DoSomeWork方法,如果需要返回某些内容,可以将其更改为Function