VB.NET如果计时器中出现ElseIf问题
我试着用一个按钮运行3个定时器,每次点击1个定时器就会运行。它在第二个计时器中运行平稳,但在第三次单击时,第三个计时器没有运行。有人能帮我做这个吗 这是我的密码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
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个计时器都将同时运行。好的,您希望当您单击第一次时,它运行第一个计时器,然后单击下一次,它运行第二个计时器,第三次时,它运行第三个计时器。。它是??