Posted at

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

More than 1 year has passed since last update.


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
投稿