00. はじめに

Windows Formのイベント実行順序は以下に記載されています。
Windows フォームのイベントの順序
が、AndroidのLifecycleのように図にして一目で分かるようにされていません。
ですので、確認がてら図を起こしていきます。

01. 環境

確認に使用した環境です。

バージョン
Windows 10 Pro 1709
Visual Studio Community 2017 15.6.5
.NET Framework 4.6.1

02. 図

Windows.Formsのイベント順序.png

図のwsd

PlantUMLはVersion 1.2018.3を使用
@startuml
title Windows.Formsのイベント順序

start

->アプリ起動;
:Control.HandleCreated;
note left
    コントロールに対してハンドルが作成されると発生します。
end note

:Control.BindingContextChanged;
note left
    BindingContext プロパティの値が
    変更された場合に発生します。
end note

:Form.Load;
note left
    フォームが初めて表示される直前に発生します。
end note

:Control.VisibleChanged;
note left
    Visible プロパティの値が
    変更された場合に発生します。
end note

:★1;

:Form.Activated;
note left
    フォームがコード内またはユーザーの操作によって
    アクティブになると発生します。
end note

if (初めて表示する) then (Yes)
    :Form.Shown;
    note left
        フォームが初めて表示されるたびに発生します。
    end note
else (No)
endif

:イベント関係;

split
    ->フォーカスを失う;
    :Form.Deactivate;
    note left
        フォームがフォーカスを失い
        アクティブでなくなると発生します。
    end note

    ->フォーカスを得る;
    :★1へ;
    detach
split again
    ->アプリ終了;
    :Form.FormClosing;
    note right
        フォームが閉じる前に発生します。
    end note

    :Form.FormClosed;
    note right
        フォームが閉じた後に発生します。
    end note

    :Form.Deactivate;
    note right
        フォーカスを失った際と同じイベント
    end note

    :Control.HandleDestroyed;
    note right
        コントロールのハンドルが
        破棄されているときに発生します。
    end note

    stop
end split

partition イベント関係 {
    partition マウスイベント {
        :MouseEnter;
        note left
            マウス ポインターによってコントロールが入力されると発生します。
            (要はマウスポインタがフォーム外から入ってくると発生)
        end note
        detach

        :MouseMove;
        note left
            マウス ポインターがコントロール上を移動すると発生します。
        end note
        detach

        :MouseHover;
        note left
            マウスポインタがコントロール上に重なると発生する
            (マウスポインタの動きが止まったら?)
        end note
        detach

        :MouseDown;
        note left
            マウス ポインターがコントロール上にあり、
            マウス ボタンがクリックされると発生します。
        end note

        :MouseUp;
        note left
            マウス ポインターがコントロール上にあり、
            マウス ボタンが離されると発生します。
        end note
        detach
    }

    partition キーイベント {
        repeat
            ->キーを押している間繰り返される;
            :PreviewKeyDown;
            note left
                このコントロールにフォーカスがあるときにキーが押された場合、
                KeyDown イベントの前に発生します。
            end note

            :KeyDown;
            note left
                コントロールにフォーカスがあるときにキーが押されると発生します。
            end note

            :KeyPress;
            note left
                コントロールにフォーカスがあるときに、
                文字、 スペース、または Backspace キーが押された場合に発生します。
            end note
        repeat while()

        :KeyUp;
        note left
            コントロールにフォーカスがあるときにキーが離されると発生します。
        end note
    }
}

@enduml

98. 参考

Windows フォームのイベントの順序 | https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/order-of-events-in-windows-forms

99. 更新履歴

日付 内容
2018/05/01 投稿
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.