LoginSignup
30
31

More than 5 years have passed since last update.

【C#】Windows.Formsのイベント順序

Posted at

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 投稿
30
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
31