如何动态调用Timer控件?????

soarsoar77 2013-06-08 11:14:47
现在碰到这么一个问题,就是我需要建立多个动态Timer控件

每个Timer触发时间间隔都不同,且每个Timer中执行的代码也是不同的

如何动态添加和删除这些Timer控件?如何使这些Timer和代码之间建立起关联,让我可以知道这个Timer是运行这段代码,另一个代码运行另一段代码?删除的时候也可以对应删除

有经验的给点思路啊?

我看到网络上有一个代码是用SetTimer API来创建的,但函数采用回调,如何往回调函数中传递参数呢?
...全文
284 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
soarsoar77 2013-06-09
  • 打赏
  • 举报
回复
OK,我刚才测试了,好像是可行的 主要是我开始没有设置Index为0 谢谢楼上的了
worldy 2013-06-09
  • 打赏
  • 举报
回复
引用 7 楼 soarsoar77 的回复:
我也在考虑,只用一个Timer了,我发现如果要完美的动态添加Timer,就是和实现VB多线程一个道理了,好像不现实 但只用一个Timer,我就只能把轮询时间最少定在10秒了,再少下去估计这个代码还没完成,下一个又触发了。 楼上的楼上,你确定 Private Sub Timer1_Timer(Index As Integer) Select Case Timer1(Index).Tag Case "1" Fun1 Case "2" Fun2 Case "3" Fun3 End Select End Sub 代码在VB中可以运行???????????你实际实验过吗?我这边报:过程声明与同名事件或过程的描述不匹配 Timer函数中是不能带任何参数的
你timer1的index要设置0, 当然测试过,况且,既然人家给你提供了代码,无论是否有测试,你自己试一下,不就知道了
soarsoar77 2013-06-09
  • 打赏
  • 举报
回复
我也在考虑,只用一个Timer了,我发现如果要完美的动态添加Timer,就是和实现VB多线程一个道理了,好像不现实

但只用一个Timer,我就只能把轮询时间最少定在10秒了,再少下去估计这个代码还没完成,下一个又触发了。


楼上的楼上,你确定
Private Sub Timer1_Timer(Index As Integer)
Select Case Timer1(Index).Tag
Case "1"
Fun1
Case "2"
Fun2
Case "3"
Fun3
End Select
End Sub

代码在VB中可以运行???????????你实际实验过吗?我这边报:过程声明与同名事件或过程的描述不匹配

Timer函数中是不能带任何参数的
of123 2013-06-09
  • 打赏
  • 举报
回复
实际上,你未必需要那么多 Timer。 例如,你可以使用一个 Timer 来完成多项定时任务: 1 将 Timer 的时间间隔设置为多个时长需求的最大公约数。 2 为每一个任务声明并实例化一个全局的计数器变量,和一个计数上限常数(时长需求与 Timer 间隔的商)。 3 在 Timer 事件中,为每一个任务写一段服务代码: * 所有的计数器变量加 1; * 如果到达某一任务计数上限,执行该任务服务,完成后计数器清零。 * 任务代码的顺序,就是任务的优先级。
worldy 2013-06-08
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Command1_Click()
Load Timer1(1)
With Timer1(1)
.Tag = "1"
.Interval = 2000
.Enabled = True
End With
End Sub

Private Sub Command2_Click()
Load Timer1(2)
With Timer1(2)
.Tag = "2"
.Interval = 3000
.Enabled = True
End With

End Sub

Private Sub Command3_Click()
Load Timer1(3)
With Timer1(3)
.Tag = "3"
.Interval = 4000
.Enabled = True
End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim TT As Timer
For Each TT In Timer1
If TT.Index <> 0 Then
Unload TT
End If
Next
End Sub

Private Sub Timer1_Timer(Index As Integer)
Select Case Timer1(Index).Tag
Case "1"
Fun1
Case "2"
Fun2
Case "3"
Fun3
End Select
End Sub

Private Sub Fun1()
Text1 = "定时器1报告"
End Sub
Private Sub Fun2()
Text1 = "定时器2报告"
End Sub

Private Sub Fun3()
Text1 = "定时器3报告"
End Sub
soarsoar77 2013-06-08
  • 打赏
  • 举报
回复
Private Sub Timer1_Timer(Index As Integer) end Sub 这个函数我试过,报:过程声明与同名事件或过程的描述不匹配
soarsoar77 2013-06-08
  • 打赏
  • 举报
回复
我还是不太清楚调用的方法,比如: Load Timer1(3) Timer1(0).Tag = "0" Timer1(0).Interval = 5000 Timer1(0).Enable = True Timer1(1).Tag = "1" Timer1(1).Interval = 8000 Timer1(1).Enable = True Timer1(2).Tag = "2" Timer1(2).Interval = 20000 Timer1(2).Enable = True 我在程序中动态载入3个Timer控件 ,并且都启用这3个时钟 那么每个时钟的执行代码我该写在哪里?才能使系统能自动触发时钟,并运行里面的代码? 默认时钟的函数是 Private Sub Timer1_Timer() end Sub 这里是无法传递参数的,这个函数里无法知道应该调用哪个Timer,楼上的,能更详细点教我吗?谢了
worldy 2013-06-08
  • 打赏
  • 举报
回复
输入传人的参数可以使用模块变量直接使用
worldy 2013-06-08
  • 打赏
  • 举报
回复
使用一个控件数组(Index设置为0)
需要的时候使用Load Timer1(n)加载
Timer1.tag属性指定一个标识值(这个值为不同的加载情况指定的唯一值),指定定时值,使能等属性

sub Timer1_Timer(indx)
select case Timer1(index).tag
case "1"
执行代码1
case "2"
执行代码2
case ...
执行代码n
end sub

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧