2015-10-16 55 views
-1

我試圖運行3個計時器使用一個按鈕,每次點擊1計時器將運行。它在第二次計時器中運行平穩,但在第三次點擊第三次計時器沒有運行。任何人都可以幫我解決這個問題嗎?VB.NET如果ElseIf發生在計時器

這裏是我的代碼

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 
+1

哎喲,看你的鍵盤隊友!關閉CAPS鎖只是輕輕一點。 – fujiFX

+3

不看C#給我。請說明C#如何與您的問題相關。 –

+0

在第三次點擊代碼時會再次觸發'Timer2.Enabled'行,因此您應該重新安排'IF'條件。 – fujiFX

回答

1

你的第二個elseif的條件和第三elseif的第一部分是相同的,這意味着第三個永遠不會執行它裏面的代碼,因爲它總是落入第二個條件。

這將使你的代碼更容易保持一個變量來跟蹤你需要啓動哪個計時器。此外,如果您使用case語句,那麼addig更多定時器是一項簡單的任務。

事情是這樣的:

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 
1

您需要了解

如果和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 
+0

我剛纔嘗試過,當我點擊按鈕時,所有3個計時器將同時運行。 – Dean

+0

好吧,你想當你點擊第一次運行第一次計時器,然後點擊它運行第二次,並在第三次運行第三次..是嗎? –

2

在你的代碼的問題是對的範圍,在這裏,如果一個條件在裏面找到(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 
1

您的代碼不會繼續執行第二ElseIf。由於第三次點擊該按鈕,語句Timer1.Enabled = 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