VB.NET循环计时器,多个" IF"条件

时间:2014-05-24 12:42:42

标签: vb.net if-statement timer

写标题试图解释我的查询我认为比我实际面临的问题更难:) - 无论如何都要回答这个问题。

所以我有一个20秒的计时器,但我希望在第一和第二个10秒内发生两件不同的事情。特别是要更改活动标签。

所以我想我自己只会在计时器滴答事件中写一个if语句,如果它= 10秒更改为第二个选项卡,当它命中0时切换回第一个,然后重启计时器

以下是我的代码,但没有任何反应,我认为问题在于阅读当前的剩余时间。

Private timeLeft2 As Integer

Private Sub timerCountdown2()
        timeLeft2 = 20
    End Sub

Private Sub tabTimer_Tick(sender As Object, e As EventArgs) Handles tabTimer.Tick

        If timeLeft2 = 10 Then
            TabControlVertical1.SelectTab(1)
        End If

        If timeLeft2 = 0 Then
            TabControlVertical1.SelectTab(0)
            tabTimer.Stop()
            tabTimer.Start()
        End If

    End Sub

我的计时器的属性已启用= true且Interval = 1000

我做错了什么?

4 个答案:

答案 0 :(得分:1)

您应该将计时器设置为每10秒触发一次Tick事件,而不是每20秒触发一次(或者上面的编辑为1)。

每次触发Tick事件时,都会查看全局布尔变量的值。 如果此变量为true,则执行为前10秒保留的代码并反转布尔值。当计时器再次触发时,执行第二种情况的代码并再次反转布尔值

因此,在代码或设计器中的某处将tabTimer间隔设置为10秒

tabTimer.Interval = 10000

并声明一个全局布尔变量(可能在相同的表单类中)

Private tabSwitcher as Boolean = True

现在Tick事件可以写成: (如果此过程需要继续,则无需停止计时器)

Private Sub tabTimer_Tick(sender As Object, e As EventArgs) Handles tabTimer.Tick

    If tabSwitcher = True Then
        TabControlVertical1.SelectTab(1)
    else 
        TabControlVertical1.SelectTab(0)
    End If
    tabSwitcher = Not tabSwitcher
End Sub

答案 1 :(得分:0)

这就是我认为你在问的问题:

  1. 在10个计时器刻度中执行某些操作 - 计时器设置为1000
  2. 做其他事情10个计时器稍后嘀嗒
  3. 重复
  4. 试试这个

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Static ct As Integer = 0
        ct += 1
        If ct = 10 Then
            'do 10 stuff here
            Debug.WriteLine("10")
        ElseIf ct = 20 Then
            'do 20 stuff here
            Debug.WriteLine("20")
    
            'then reset ct <<<<<<<<<<<<
            ct = 0
        End If
    End Sub
    

答案 2 :(得分:0)

Friend Class timerCtrl : Inherits Timer

    Private ReadOnly tickFunc As EventHandler = Nothing

    Friend Sub New(ByRef theFunc As EventHandler, ByVal theInterval As Integer, Optional ByVal autoStart As Boolean = True)
        tickFunc = theFunc
        Interval = theInterval
        AddHandler Tick, tickFunc
        If (autoStart) Then Start()
    End Sub

    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            RemoveHandler Tick, tickFunc
        End If
        MyBase.Dispose(disposing)
    End Sub

End Class

Friend Class TabClass

    Private timerStep As Boolean = False
    Private timerTabs As timerCtrl = Nothing

    Friend Sub New()
        timerTabs = New timerCtrl(AddressOf timerTabsTick, 10000)
    End Sub

    Private Sub timerTabsTick(ByVal sender As Object, ByVal e As EventArgs)
        timerStep = Not timerStep
        If timerStep Then
            ' condition 1
        Else
            ' condition 2
        End If
    End Sub

End Class

一个用于抽象的简单计时器助手类。杀掉计时器,而不仅仅是。停止使用timerTabs.Dispose()。无需单独分离事件处理程序。

答案 3 :(得分:-1)

在我看来,由于您已将计时器设置为值20,因此您的计时器永远不会达到您在if语句中要求的值。

另外,我已经使用了视觉基础知识并且不确定但是它不需要是timeleft2.value吗?

此外,通过停止和启动计时器,它实际上并没有重新启动计时器,当你在15秒内停止它并且重启时,计时器从15秒重新启动。

试试这个。

    If timeLeft2.Value = 10 Then
        TabControlVertical1.SelectTab(1)
        else if timeLeft2.Value = 0 Then
        TabControlVertical1.SelectTab(0)
        tabTimer.Stop()
        timeLeft2.value = 0
        tabTimer.Start()
    End If