我发现在我的一个程序中,当我让它弹出消息框时,如MsgBox "给我停住"
我没点确定,不管它,我却发现计时器仍然在工作(仍然在修改窗体上的数据),郁闷,这是怎么一回事?如果计时器事件不能在interval时间里完成,会不会累计下去?最后导致interval实际上跟等于是0一样?
用以下面代码,当点击command1时,好象timer就不写时间了,为何,出现这两种情况?
Dim mTime As DatePrivate Sub Command1_Click()
MsgBox "给我停住"End SubPrivate Sub Form_Resize()
Timer1.Interval = 2 * 1000
mTime = Time
Print mTime
End SubPrivate Sub Timer1_Timer()
Print Time, Format(Time - mTime, "hh:mm:ss")
mTime = Time
End Sub

解决方案 »

  1.   

    因为VB开发出来的程序是单线程的!!
      所以当\    MsgBox "给我停住"  弹出后直到你点确定或者取消(此对话筐消息)为止,才能执行其他的代码!
      

  2.   

    没问题呀
    Private Sub Timer1_Timer()
    MsgBox "给我停住"Print Time, Format(Time - mTime, "hh:mm:ss")
    mTime = Time
    End Sub  
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  3.   

    但是我发现在我编的一个程序中,当我让它弹出消息框时,如MsgBox "给我停住"
    我没点确定,不管它,我却发现计时器仍然在工作(仍然隔一段时间就触发计时器事件,修改了窗体上的数据),郁闷,这又是怎么一回事?
      

  4.   

    但是我发现在我编的一个程序中,当我让它弹出消息框时,如MsgBox "给我停住"
    我没点确定,不管它,我却发现计时器仍然在工作(仍然隔一段时间就触发计时器事件,修改了窗体上的数据),郁闷,这又是怎么一回事?
    2中可能。
    你用的MessageBox函数,并且hwnd填的0你用的是SetTimer函数, 并且指定了不属于window的回掉函数
      

  5.   

    我的窗体设计为无边框,且load中就置前了,所以在弹出消息框前,先置后,希望点确定后,再置前。
    如以下代码。    SetWindowPos Me.Hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE    MsgBox "OK!"
        
        '置前
        SetWindowPos Me.Hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE窗体中共有几个计时器,难道是置前置后引起的?
      

  6.   

    我猜测是因为MSGBOX是运行在一个单独的进程中的,类似VB中的控件。因此不会对主程序的进程发生影响。
      

  7.   

    不管原因如何,要解决这个问题还是很简单的:
    改成:
    Private Sub Command1_Click()
    Timer1.Enabled = False
    If MsgBox("给我停住", vbOKOnly) = vbOK Then Timer1.Enabled= True
    End Sub就可以了