关于timer控件的一点疑问

liuying1982000 2012-06-13 02:39:54
我只想让time_tick里的函数运行一次,我这样做,定义一个全局boolean变量a,初始为true,timer的interval设为10000,也就是10秒,这样写

 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If a = True Then
MsgBox("safalj")
a = False
End If
End Sub

但结果msgbox还是每隔10秒运行一次啊,我已经将a设为false了,为什么会这样?
...全文
158 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2012-06-15
  • 打赏
  • 举报
回复
把简化以后,执行还是出错的代码 贴出来吧,
btxdlibin 2012-06-15
  • 打赏
  • 举报
回复
1. 定义静态变量:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Static a As Boolean
My.Application.DoEvents()
If a = False Then
a = True
MsgBox("a")
End If

End Sub
2.定义全局变量
就像8楼那样...
楼主基础有待加强
liuying1982000 2012-06-15
  • 打赏
  • 举报
回复
真心不行,呵呵,想不通为什么
shqdb888 2012-06-15
  • 打赏
  • 举报
回复
可以逐步调试执行,看问题出在那里,我一直用,没出现你说的现象
hztltgg 2012-06-14
  • 打赏
  • 举报
回复
我实在不知道你怎么写的。

Module Module1
Public a As Boolean = False
End Module
Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim f2 As New Form2
f2.Show()
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
a = True
End Sub
End Class
Public Class Form2

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
If a = True Then
MsgBox("safalj")
a = False
End If

End Sub
End Class


没有任何问题呀,只延迟执行一次
hztltgg 2012-06-14
  • 打赏
  • 举报
回复
没什么区别呀,你试过不行?我现在没有vs环境,不能试
liuying1982000 2012-06-14
  • 打赏
  • 举报
回复
谢谢楼上耐心的解答,不过你理解错我的逻辑了,timer控件是在form1里,而
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
a = True
End Sub

是在form2里,你正好放反了
liuying1982000 2012-06-13
  • 打赏
  • 举报
回复
在模块文件里啊(Module1.vb)
Public a As Boolean

看来Timer1.Enable = false是无法终止timer控件运行的
hztltgg 2012-06-13
  • 打赏
  • 举报
回复
form2,form1是两个类,而一般来说,vb.net没有全局变量这个概念,你的全局变量是在哪儿怎么定义的?
liuying1982000 2012-06-13
  • 打赏
  • 举报
回复
补充一下,Timer1.Enable = false也不行啊,怎么还是按照interval的间隔来不断的执行
bdmh 2012-06-13
  • 打赏
  • 举报
回复
form1里timer的modifers属性设置为public,点按钮是,form1.timer1.enable=false
liuying1982000 2012-06-13
  • 打赏
  • 举报
回复
哦,其实是这样,是有两个form,timer在form1里,button在form2里,点击form2里button后,让form1里timer里的函数执行一次,其实就是为了刷新datagridview,因此我想到用一个全局变量来表达form2里的button被点击了
hztltgg 2012-06-13
  • 打赏
  • 举报
回复
代码应该不完整吧,你的代码应该只能运行一次,虽然写法不是很理想。
bdmh 2012-06-13
  • 打赏
  • 举报
回复
用不着啊
第一,如果只运行一次,干嘛用timer
第二,如果用,就这样

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
//do someting
//Timer1.Enable = false; 让Timer1不可用
End Sub

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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