VB.Net调用此函数的最佳方法是什么?

时间:2013-04-23 07:20:08

标签: .net vb.net

使用下面的代码,调用第二个函数(Checkbox1.CheckedChanged)的最佳方法是什么?我尝试使用(发件人,e)但是每次程序完成安装时它会不断调用App2.msi,当程序尝试重复安装App2.msi时将程序抛入连续循环中。尝试没有发件人和#34 ;调用CheckBox1_CheckedChanged()"但后来我的代码不能编译。

我对VB很陌生,所以我不确定是否应该以不同的方式调用msi,或者我是否还不够了解如何调用某些内容像这样。如果有人需要更多细节,请告诉我!谢谢!

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim p1 As New Process
    p1 = System.Diagnostics.Process.Start("App1.msi")
    p1.WaitForExit()
    CheckBox2.Checked = True
    Label2.Visible = True

Call CheckBox1_CheckedChanged()

End Sub

Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged

End Sub


Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click

End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    Dim p1 As New Process
    p1 = System.Diagnostics.Process.Start("App2.msi")
    p1.WaitForExit()
    CheckBox1.Checked = True
    Label3.Visible = True
End Sub

Private Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.Click

End Sub
End Class

2 个答案:

答案 0 :(得分:3)

正确的方法是:根本不要打电话!它是一个事件处理程序,它不应该被你调用。

如果该方法包含您希望在某些情况下手动调用的代码,请将其移至另一个方法,该方法由 CheckBox1_CheckedChanged和其他代码调用

此外,评论是正确的:如果您更改CheckBox1.Checked,它会再次调用事件处理程序 - 您将获得无限循环。

答案 1 :(得分:1)

请尝试以下

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    Dim oSender as CheckBox = DirectCast(sender,CheckBox)
    If oSender.Checked then
        Dim p1 As New Process
        p1 = System.Diagnostics.Process.Start("App2.msi")
        p1.WaitForExit()
        Label3.Visible = True
    End If
End Sub