VB.NET如果计时器中出现ElseIf问题

VB.NET如果计时器中出现ElseIf问题,.net,vb.net,if-statement,timer,.net,Vb.net,If Statement,Timer,我试着用一个按钮运行3个定时器,每次点击1个定时器就会运行。它在第二个计时器中运行平稳,但在第三次单击时,第三个计时器没有运行。有人能帮我做这个吗 这是我的密码 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Timer1.Enabled = False Th

我试着用一个按钮运行3个定时器,每次点击1个定时器就会运行。它在第二个计时器中运行平稳,但在第三次单击时,第三个计时器没有运行。有人能帮我做这个吗

这是我的密码

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If Timer1.Enabled = False Then
            Timer1.Start()
        ElseIf Timer1.Enabled = True Then
            Timer2.Start()
        ElseIf Timer1.Enabled = True And
            Timer2.Enabled = true Then
            Timer3.Start()

        End If

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label1.Text = Label1.Text + 1
        If Label1.Text = 60 Then
            Label1.Text = 0
            Label2.Text += 1
        ElseIf Label2.Text = 60 Then
            Label2.Text = 0
            Label3.Text += 1
        End If

    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Label6.Text = Label6.Text + 1
        If Label6.Text = 60 Then
            Label6.Text = 0
            Label5.Text += 1
        ElseIf Label5.Text = 60 Then
            Label5.Text = 0
            Label4.Text += 1
        End If

    End Sub
    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        Label12.Text = Label12.Text + 1
        If Label12.Text = 60 Then
            Label12.Text = 0
            Label11.Text += 1
        ElseIf Label11.Text = 60 Then
            Label11.Text = 0
            Label10.Text += 1
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

你需要理解If和ElseIf之间的区别

如果第一个条件匹配,则不会转到下一个条件进行检查,因此在这种情况下,必须像这样替换此代码

If Timer1.Enabled = False Then
    Timer1.Start()
End If

If Timer1.Enabled = True Then
    Timer2.Start()
End If  

If Timer1.Enabled = True And Timer2.Enabled = true Then
    Timer3.Start()
End If
Public Class Form1
    Dim ClickCount as Integer 
    ClickCount = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ClickCount = ClickCount + 1
        If Timer1.Enabled = False and ClickCount = 1 Then
            Timer1.Start()
        ElseIf Timer1.Enabled = True and ClickCount = 2 Then
            Timer2.Start()
        ElseIf Timer1.Enabled = True And Timer2.Enabled = true and ClickCount = 3  Then
            Timer3.Start()
            ClickCount = 0;
        End If
    End Sub
编辑

根据你的评论,你可以这样做

If Timer1.Enabled = False Then
    Timer1.Start()
End If

If Timer1.Enabled = True Then
    Timer2.Start()
End If  

If Timer1.Enabled = True And Timer2.Enabled = true Then
    Timer3.Start()
End If
Public Class Form1
    Dim ClickCount as Integer 
    ClickCount = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ClickCount = ClickCount + 1
        If Timer1.Enabled = False and ClickCount = 1 Then
            Timer1.Start()
        ElseIf Timer1.Enabled = True and ClickCount = 2 Then
            Timer2.Start()
        ElseIf Timer1.Enabled = True And Timer2.Enabled = true and ClickCount = 3  Then
            Timer3.Start()
            ClickCount = 0;
        End If
    End Sub

代码中的问题在作用域上,如果在(if,ELSE-if,ELSE-if,ELSE)语句中发现一个条件,那么代码将进入该作用域,并且不会检查其他条件。比如说,

IF (CONDITION)
..some code
ELSE IF(CONDITION) // if this condition is found true, then compiler will not check other condtion
..some code // this code will be executed only
ELSE IF(CONDITION)
..some code
ELSE
..some code
首先,请确保所有选项均已启用为true或false,并按以下方式更改代码:

     If Timer1.Enabled = False And Timer2.Enabled = False And  Timer3.Enabled=False Then
            Timer1.Start()
     End If
     If Timer1.Enabled = True And Timer2.Enabled = False And  Timer3.Enabled=False Then
            Timer2.Start()
     End If
     If Timer1.Enabled = True And Timer2.Enabled=True And Timer3.Enabled=False Then
            Timer3.Start()
     End If

您的代码永远不会到达第二个
ElseIf
。自从第三次单击该按钮后,语句
Timer1.Enabled=True
仍然为True,它将进入该代码段。这使得启用第三个计时器的部分无法访问

您真正想要的是:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click

        If Timer1.Enabled = True And Timer2.Enabled = True Then
            Timer3.Start()
        ElseIf Timer1.Enabled = True Then
            Timer2.Start()
        Else 
            Timer1.Start()
        End If

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Timer1.Tick

        Label1.Text = Label1.Text + 1
        If Label1.Text = 60 Then
            Label1.Text = 0
            Label2.Text += 1
        ElseIf Label2.Text = 60 Then
            Label2.Text = 0
            Label3.Text += 1
        End If

    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Timer2.Tick

        Label6.Text = Label6.Text + 1
        If Label6.Text = 60 Then
            Label6.Text = 0
            Label5.Text += 1
        ElseIf Label5.Text = 60 Then
            Label5.Text = 0
            Label4.Text += 1
        End If

    End Sub
    Private Sub Timer3_Tick(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Timer3.Tick

        Label12.Text = Label12.Text + 1
        If Label12.Text = 60 Then
            Label12.Text = 0
            Label11.Text += 1
        ElseIf Label11.Text = 60 Then
            Label11.Text = 0
            Label10.Text += 1
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

第二个ElseIf和第三个ElseIf的第一部分的条件相同,这意味着第三个ElseIf从不执行其中的代码,因为它总是属于第二个条件

保存一个变量来跟踪需要启动的计时器会使代码更加简单。另外,如果使用case语句,那么添加更多计时器是一项简单的任务

大概是这样的:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'declare a static variable which keeps its value
        Static whichTimer As Integer = 0
        'every time the button is clicked increment the value
        whichTimer += 1

        'now start the appropriate timer
        Select Case whichTimer
            Case 1
                Timer1.Start()
            Case 2
                Timer2.Start()
            Case 3
                Timer3.Start()
            Case Else
                'don't care
        End Select

End Sub

哎哟,小心你的键盘伙伴!关闭CAPS lock只需轻轻敲打即可。在我看来,它不像C。请澄清C#与您的问题的关系。在第三次单击时,代码将再次触发
Timer2.Enabled
行,因此,您应该将
IF
条件从上到下重新排列。我刚才尝试过这样做,当我单击按钮时,所有3个计时器都将同时运行。好的,您希望当您单击第一次时,它运行第一个计时器,然后单击下一次,它运行第二个计时器,第三次时,它运行第三个计时器。。它是??