我的处理过程最后几行是msgbox index '控件的indexwhile true doeventswend现在我观察到的现象是,我点击第一个,弹出0,再点击第二个,弹出1,谁能叙述一下整个事件响应 的过程及顺序,谢谢!分数不是问题.
当然是立刻响应,这里不存在顺序的问题。一旦事件发生就会调用事件处理函数。看看 下面的程序:Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Dim xx As IntegerPrivate Sub command1_Click(Index As Integer) While True command1(Index).Caption = Str(xx) Sleep 200 xx = xx + 1 DoEvents Wend End SubPrivate Sub Form_Unload(Cancel As Integer) End End Sub
to TechnoFantasy(www.applevb.com) :通过你的例子,我发现它们似乎是抢占式的.当事件发生时,如果前一个还没有执行完,会立刻终止,去响应下一个. 哪位高手能解释一下啊,谢谢.
试过了TechnoFantasy(www.applevb.com)的方法,加到5秒时,好像是顺序响应,大概是sleep的问题,我做了一个sleep的函数,有一点立即执行,试试看Sub sleep(a As Long)'a 为秒 Dim t As Date t = DateAdd("s", a, Now) Do While Now < t DoEvents LoopEnd Sub
的过程及顺序,谢谢!分数不是问题.
下面的程序:Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim xx As IntegerPrivate Sub command1_Click(Index As Integer)
While True
command1(Index).Caption = Str(xx)
Sleep 200
xx = xx + 1
DoEvents
Wend
End SubPrivate Sub Form_Unload(Cancel As Integer)
End
End Sub
好像不对啊,如果你把 sleep 200 改为 sleep 50000 ,你会发现,好像是上一个结束后,下一个
才执行的. 顺便说一句,sleep的时间单位是毫秒.你是不是设的时间太短,造成错觉?
Dim t As Date
t = DateAdd("s", a, Now)
Do While Now < t
DoEvents
LoopEnd Sub
顺序为, 响应第一个事件 ------------>被中断去响应第二个事件 -------->第二个事件响应完成后再继续执行第一个的剩余部分.多个的情形以此类推.
谢谢大家,特别感谢 TechnoFantasy(www.applevb.com) 和 ttyp(懒人) .