投稿者 るきお  (社会人) 投稿日時 2013/5/6 20:24:35
確かに
Load→VisibleChanged→Shown
が正確ですね。
Debug.WriteLineを各イベントにしかけると確認できます。

しかし、MsgBoxを使うとちょっとおもしろい結果になります。

Form1側
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim f As New Form2
    f.Show()
End Sub


Form2側
Public Class Form2

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Debug.WriteLine("Load")
        MsgBox("Load")
    End Sub

    Private Sub Form2_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        Debug.WriteLine("Shown")
        MsgBox("Shown")
    End Sub

    Private Sub Form2_VisibleChanged(sender As Object, e As EventArgs) Handles Me.VisibleChanged
        Debug.WriteLine("VisibleChanged")
        MsgBox("VisibleChanged")
    End Sub
End Class


これを実行するとMsgBoxは次の順番に表示されます。
Load→Shown→VisibleChanged
一方、出力ウィンドウ(デバッグ)には次のように表示されます。
Load→VisibleChanged→Shown
だから、適切な方法で確認しないとMSDNに記載されている順番と一致した結果になりません。

このように順番が変化する理由は追及していませんが、
多分、フォームが表示されていないのにメッセージボックスだけ表示するようなプログラムになっているので、.NET Frameworkがつじつまを合わせるために中でトリッキーな動きをしているのだと思います。