Form上放一个Text:Private Sub Form_Activate()
   
   MsgBox "Activate" & Text1.Text     '6
End SubPrivate Sub Form_Initialize()
   
   MsgBox "Initialize"                '1
   MsgBox "Initialize" & Text1.Text   '4
   Text1.Text = "123"                 '5
End SubPrivate Sub Form_Load()
   
   MsgBox "Load"                      '2
   MsgBox "Load" & Text1.Text         '3
End Sub
-------------
为什么执行顺序是1-6(注释的顺序)。
Form、Text1是在Form_Initialize里进行加载的?为什么Form_Initialize中为Text1赋值不是一开始就运行?

解决方案 »

  1.   

    按 F8 单步运行,看看Private Sub Form_Initialize() 
      
      MsgBox "Initialize"                '1 
      MsgBox "Initialize" & Text1.Text  '4 当遇到text1时,就会跳到load里运行,load运行后才会显示本条
      Text1.Text = "123"                '5 
    End Sub 
      

  2.   

    三个过程执行的先后不难理解,先执行Form_Initialize-然后是Form_Load,最后是Form_Activate,即初始化---加载----激活.在Form_Initialize阶段,窗体和控件还没加载,当然也就不存在给Text赋值的问题,加载后就能赋值了整个过程应该如此
      

  3.   


    Private Sub Form_Activate() 
      
      MsgBox "Activate" & Text1.Text    '6 
    End Sub Private Sub Form_Initialize() 
      
      MsgBox "Initialize"                '1 
      MsgBox "Initialize" & Text1.Text  '4 
      Text1.Text = "123"                '5 
    End Sub 首先自然是初始化即Initialize,执行到MsgBox "Initialize" & Text1.Text  '4 这句时需要找到Text1.text,而Text1.text是在窗体上提供的,所以必须先去加载窗体,即窗体load事件,所以转到2然后3,执行了3之后就知道Text1.text是什么内容了,当然此时text1.text也可以被赋值了最初就是要初始化窗体,初始化之后当然要激活窗体,所以窗体获得焦点而执行Activate另:个人觉得这段代码
    Private Sub Form_Initialize() 
      
      MsgBox "Initialize"                '1 
      MsgBox "Initialize" & Text1.Text  '4 
      Text1.Text = "123"                '5 
    End Sub 
    是个坏风格因为这试图控制VB的运行顺序机制
      

  4.   

    在 Form_Initialize() 触发时窗体(包括 Text1)尚未载入,但是你要访问 Text1.Text,只能马上去执行载入操作。基本准则:控件的初始化应该写在 Form_Load() 中。