写标题试图解释我的查询我认为比我实际面临的问题更难:) - 无论如何都要回答这个问题。
所以我有一个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
我做错了什么?
答案 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)
这就是我认为你在问的问题:
试试这个
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