2013-04-23 76 views
0

使用下面的代码,调用第二个函数(Checkbox1.CheckedChanged)的最佳方法是什么?我尝试使用(发件人,电子邮件),但随后它不断调用App2.msi每次程序完成安装,抛出程序进入一个连续的循环,因为它试图重复安装App2.msi ..试图没有发件人“调用CheckBox1_CheckedChanged ()“,但然后我的代码不会编译。VB.Net调用此函数的最佳方式是什么?

我很新的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 
+1

尝试取出CheckBox1.Checked = true在CheckBox1_CheckedChanged事件 – 2013-04-23 07:22:14

+0

可我只是提到,控制命名是样的重要和最佳实践。这会为你节省很多时间和困惑。 – Terry 2013-04-23 07:22:48

+0

CheckBox1_CheckedChanged(Nothing,new EventArgs()) – 2013-04-23 07:24:28

回答

3

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

如果方法中包含要手动调用在某些情况下,将其移动到由CheckBox1_CheckedChanged和你的其他代码调用一个单独的方法的代码。

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

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 
相关问题