こんにちは、リバティエンジニアのFUNA(フナ)です。
現役でフリーランスのエンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。
この記事はこんな方におすすめ
- Windows.Forms アプリケーションのイベント発生順序が知りたい
- イベントが正しく処理されない
Windowsフォームアプリケーションの開発をしていると、コントロールのイベントが発生する順序について考えないといけないことがあります。
今回は、C#で開発するのに重要な「Windows.Formsのイベントが発生する順番」についてみていこうと思います。
「各イベントを順番に処理する必要がある。」
これは、開発者にとってすごく重要な問題です。
フォームの構成している要素を再描画したりするときには、イベント処理に注意が必要です。
実行時のイベントの正確な発生順序がとても重要であり、それを認識して気を配る必要があります。
目次
そもそもC#の.Net開発におけるイベントとは?
C#での「イベント」についてはみなさんご存じだと思いますが、簡単に説明していきます。
イベントとは
様々なコントロール(Button, TextBox, Checkox 等)に対して
「ボタンが押されたよ!」「テキストが変わったよ!」「チェックボックスにチェックがついたよ!」
などのアクションがあった際に、その通知を受けてどんな処理をするのか。
を指示することができます。
例えば「ファイルを選択」というButtonが押されたときに、”Button_Click”のイベントが発生します。
そのイベントを受けて「ファイルを選択する画面を表示」するというような指示を出すことができます。
C#.Netアプリケーション開発におけるイベントの種類
一言に「イベント」と言っても「コントロールに付随するイベント」や「フォームのイベント」などいろいろあるので、そのあたりもまた記事にしておきますね!
次にイベントにはいったいどのような種類があるのか、代表的なものを紹介します!
Form.Load | フォームを読み込むときに発生します |
Form.Shown | フォームが最初に表示されたときに発生します |
Form.FormClosed | フォームを閉じるたびに、閉じた後及び閉じる理由を指定した後に発生します。 |
Form.FormClosing | フォームを閉じるたびに、閉じる前及び閉じる理由を指定する前に発生します。 |
Button.Click | コンポーネントがクリックされた時に発生します。 |
TextBox.TextChanged | テキストの値が変更されたときに発生します。 |
CheckBox.CheckedChanged | Checkの値が変更される時に発生します。 |
Control.Leave | コントロールがフォームのアクティブコントロールで無くなった時に発生します。(アクティブでなくなった時) |
Control.KeyUp | キーを離した時に発生します。 |
Control.KeyDown | キーが最初に押された時に発生します。 |
簡単に紹介しただけでもこんなにあります。
実際には「イベント」はまだまだたくさんあり、同じClickイベントやLoadイベントでもコントロールの数だけ存在します。
随時使うコントロールのイベントにはどのようなものがあるのか調べて把握することが大切です。
C#.NetでのWindows.Formイベントの発生順序
では、さっそく本題に入ります。
C#の.Netフレームワークには様々なコントロールがありますが、今回は「Windows.Form」のイベントの順序に絞ってみていきます。
Windowsフォームアプリケーション起動時のイベント順序
Windowsフォームアプリケーションは起動すると、メインフォームのスタートアップイベントが決められた順序で発生します。
- Control.HandleCreated
- Control.BindingContextChanged
- Form.Load
- Control.VisibleChanged
- Form.Activated
- Form.Shown
プロジェクトを作って、最初の状態で実行しても処理を指定していませんので何も起きませんが、実際にはこの6つのイベントが順番に発生して通知してくれているんです。
そのため、あるべき場所で正しい処理を順番に処理したい時は、このイベントの順番がとても重要になってきますので覚えておきましょう。
Windowsフォーム終了時のイベント順序
先ほどは起動してすぐのイベントでしたが、今度はWindowsフォームアプリケーションを終了したときに順番に発生するイベントを見ていきましょう!
- Form.Closing
- Form.FormClosing
- Form.Closed
- Form.FormClosed
- Form.Deactivate
このように、アプリケーションを閉じる時にもメインフォームの「シャットダウンイベント」が順番に発生します。
こちらも起動時と同様に、正しい順番で処理を行いたいときには、知っておかなければならないことなので覚えておきましょう。
ちなみに「Applicationクラス」の 「ApplicationExit」というイベントは、上記で紹介したメインフォームのシャットダウンイベントが終わった後に発生するので注意してください。
まとめ
今回は、C#.NetでWindowsフォームアプリケーションを開発する際に発生するイベントには決められた順番があることについて解説しました。
「Loadイベントの後にShownイベントが発生する」など意外と忘れがちなことなので、しっかりと覚えておきましょう。
【2021年最新版】C#学習におすすめ本のレベル別TOP3を紹介【現役エンジニアが厳選】
現役エンジニアがおすすめするC#の本・参考書のTOP3をご紹介!本当にお勧めした本だけを厳選したので、TOP3だけを紹介します。それぞれのレベル別に分けたので、自分に合ったものを選んでください。
何かと通信しているようなアプリケーションだと、切断する順番など間違えてしまうと、例外が発生することにもなりかねませんので、イベントの発生順序はこの記事を参考にして覚えてください。
本ブログでは、C#の「イベント関係」の記事が他にもあるのでよかったら見てみてください。