none
VB觀念...執行順序 RRS feed

  • 問題

  • 1 Form_Initialize
    2 Form_Load
    3 Form_Resize
    4 Form_Activate
    5 Form_GotFocus
    6 Form_Paint
    7 Form_Unload
    8 Form_Terminate

    請問VB的執行順序起始點是從上面這樣排下來的嗎??

     

    有些程式碼會寫成Form_OnInitialize

    多一個On有甚麼差別嗎?

     

    假如程式只有Form_Initialize和Form_Load的話

    當最後執行完Form_Load裡面的程式碼之後

    代表整個VB程式已經執行完了嗎??

     


    • 已編輯 Qoo 2011年12月1日 上午 09:41
    2011年12月1日 上午 09:34

解答

  • 這種問題都可以不用問的。在每個事件中設中斷點,只要在偵錯模式之下就可以看到各事件的執行順序了,或者在事件中寫些什麼訊息到某個 label 也可以。此外,VB.NET 已經取消部份 VB6 裡面的部份事件了。

    至於 Form_Resize 是 trigger 的,就是當使用者調整視窗大小時才會被觸發,視窗載入時並不會自動觸發。

    你可以拿以下程式自已去測試看看:

    Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            lbox.Items.Add("Form_Load ")
        End Sub
    
        Private Sub Form1_Resize(sender As System.Object, e As System.EventArgs) Handles MyBase.Resize
            lbox.Items.Add("Form_Resize ")
        End Sub
    
        Private Sub Form1_Activated(sender As System.Object, e As System.EventArgs) Handles MyBase.Activated
            lbox.Items.Add("Form_Activated ")
        End Sub
    
        Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            lbox.Items.Add("Form_Paint ")
        End Sub
    
        Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles lbClear.Click
            lbox.Items.Clear()
        End Sub
    
    End Class
    

    程式中 lbox 是一個 ListBox 控制項,lb 是一個 Label 控制項,btnClear 是一個 Button 控制項。

     




    2011年12月1日 下午 03:06
  • 這篇有談到會有不同的順序之情形:

    [VB2005] ListView 初始化與 ItemChecked 事件


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年12月1日 下午 04:48

所有回覆

  • 你指的是VB6 還是 Visual Basic 2003以後的.NET版本 ?

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年12月1日 上午 09:54
    版主
  • 不好意思~~忘記註明了

    是VB2010~

    2011年12月1日 下午 01:29
  • 這種問題都可以不用問的。在每個事件中設中斷點,只要在偵錯模式之下就可以看到各事件的執行順序了,或者在事件中寫些什麼訊息到某個 label 也可以。此外,VB.NET 已經取消部份 VB6 裡面的部份事件了。

    至於 Form_Resize 是 trigger 的,就是當使用者調整視窗大小時才會被觸發,視窗載入時並不會自動觸發。

    你可以拿以下程式自已去測試看看:

    Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            lbox.Items.Add("Form_Load ")
        End Sub
    
        Private Sub Form1_Resize(sender As System.Object, e As System.EventArgs) Handles MyBase.Resize
            lbox.Items.Add("Form_Resize ")
        End Sub
    
        Private Sub Form1_Activated(sender As System.Object, e As System.EventArgs) Handles MyBase.Activated
            lbox.Items.Add("Form_Activated ")
        End Sub
    
        Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            lbox.Items.Add("Form_Paint ")
        End Sub
    
        Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles lbClear.Click
            lbox.Items.Clear()
        End Sub
    
    End Class
    

    程式中 lbox 是一個 ListBox 控制項,lb 是一個 Label 控制項,btnClear 是一個 Button 控制項。

     




    2011年12月1日 下午 03:06
  • 1. 你列的有些是 VB6 的事件

    2. Windows Forms Events Lifecycle

     

    3. 以下描述 [否]

    假如程式只有Form_Initialize和Form_Load的話

    當最後執行完Form_Load裡面的程式碼之後

    代表整個VB程式已經執行完了嗎??


    歡迎參觀我的Blog.NET菜鳥自救會


    2011年12月1日 下午 03:33
    版主
  • 這篇有談到會有不同的順序之情形:

    [VB2005] ListView 初始化與 ItemChecked 事件


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年12月1日 下午 04:48