工程1有FORM1,FORM2两个窗体,对FORM1编程:
Private Sub Form_Load()
Dim i, j As Integer
For i = 1 To 10000
  Do While DoEvents
    For j = 1 To 10000
    Next j
    Exit Do
  Loop
Next i
Form2.Show
End Sub
想实现的效果是:载入FORM1后停留一会儿,再显示FORM2
但执行代码的效果却是载入FORM1后马上显示FORM2,请问哪里有问题?

解决方案 »

  1.   

    什么是SLEEP啊(菜鸟),这段代码的问题在哪?为什么不能挺?
      

  2.   

    '这样吧.Private Sub Form_Load()
    Dim i, j As Integer
    Show
    For i = 1 To 1000
         For j = 1 To 1000
             DoEvents
         Next j
    Next i
    Form2.Show
    End Sub
      

  3.   

    你的代码应该没有执行到for j
      

  4.   

    Option ExplicitPublic Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Public Sub Main()
      Load Form1
      Form1.Show
      
      Sleep 5000
      
      Load Form2
      Form2.Show
    End Sub
      

  5.   

    to tztz520:按照你的写法真的可以了,好像就是多了一个SHOW,你能告诉我关键的区别在哪里吗?
    to daisy8675:这种方法我差不多知道,我是想用除这种方法外的另一种解决这个问题,不过又学了一个SLEEP,就是不知道既然有SLEEP,干嘛还用那些循环语句拖延时间呢?
      

  6.   

    还有FORM的SHOW和LOAD有什么区别呢?我觉得如果是SHOW的话,应该已经包括LOAD了,不知道理解得对不对
      

  7.   

    指出几个问题:
    1、Do While DoEvents这句不对,当有事件发生时才返回True,没事件,那Do循环将根本不执行;
    2、这种使用DoEvents方法很危险,Form_Load过程在执行中,Form1强制显示,此时若卸载窗体,会可能引起窗体隐性加载的问题,导致窗体无法完成卸载。
    3、若你只想延时,并在延时中不接受用户响应,那你可用Sleep或不加DoEvents的循环;若你想延时期间不让程序锁定,并接受用户响应,那根本不能用此法,用个简单的Timer控件完成就行了。
    4、Dim i, j As Integer这种声明不对,i实际被声明成了Variant变量,Variant用于循环变量会奇慢无比的。这种不良习惯一定要改!