C#

[C#] Windows.Formsのイベントが発生する順番は?

こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

Windowsフォームアプリケーションの開発をしていると、コントロールのイベントが発生する順序について考えないといけないことがあります。

各イベントを順番に処理する必要がある。

これは、開発者にとってすごく重要な問題なんです。


フォームの構成している要素を再描画したりするときに、イベント処理に注意が必要な時には、実行時のイベントの正確な発生順序。がとても重要かつそれを認識し、気を配る必要があります。

今回はC#で開発するのに重要な「Windows.Formsのイベントが発生する順番」についてみていこうと思います。

そもそもイベントとは?

この記事にたどり着いているということは、「イベント」についてはみなさんご存じだと思いますが、簡単に説明します。

イベント... 様々なコントロール(Button, TextBox, Checkox 等)に対して「ボタンが押されたよ!」「テキストが変わったよ!」「チェックボックスにチェックがついたよ!」などのアクションがあった際に、その通知を受けることができ、その時にどんな処理をするのか。を指示することができます。

IT博士
IT博士

例えば、「ファイルを選択」というButtonが押されたときに、”Button_Click”のイベントが発生したので、ファイルを選択する画面を表示する。という指示を出すことができますよ♪

なるほど!

特定のアクションの後に何をするか決められわけですね!

イベントの種類

「イベント」については皆さん理解できたと思います。

イベントにもコントロールに付随するイベントや、フォームのイベントなどいろいろあるので、そのあたりもまた記事にしておきますね!

次にイベントにはいったいどのような種類があるのか、代表的なものを紹介します!

Form.Loadフォームを読み込むときに発生します
Form.Shownフォームが最初に表示されたときに発生します
Form.FormClosedフォームを閉じるたびに、閉じた後及び閉じる理由を指定した後に発生します。
Form.FormClosingフォームを閉じるたびに、閉じる前及び閉じる理由を指定する前に発生します。
Button.Clickコンポーネントがクリックされた時に発生します。
TextBox.TextChangedテキストの値が変更されたときに発生します。
CheckBox.CheckedChangedCheckの値が変更される時に発生します。
Control.Leaveコントロールがフォームのアクティブコントロールで無くなった時に発生します。(アクティブでなくなった時)
Control.KeyUpキーを離した時に発生します。
Control.KeyDownキーが最初に押された時に発生します。

「イベント」はまだまだたくさん、コントロールの数だけあるので、随時使うコントロールのイベントにはどのようなものがあるのか調べてみるといいですよ!

Windows.Formのイベントの発生順序

では、さっそく本題に入ります!

今回は、さまざまなコントロールがありますが、「Windows.Form」のイベントの順序に絞ってみていきます。

Windowsフォーム起動時のイベント順序

Windowsフォームアプリケーションは起動すると、メインフォームのスタートアップイベントが決められた順序で発生します。

  1. Control.HandleCreated
  2. Control.BindingContextChanged
  3. Form.Load
  4. Control.VisibleChanged
  5. Form.Activated
  6. Form.Shown

プロジェクトを作って、最初の状態で実行しても処理を指定していませんので、何も起きませんが、実際にはこの6つのイベントが順番に発生して通知してくれているんです。

なのであるべき場所で、正しい処理を順番に処理したい時は、これがとても重要になってきますので、覚えておきましょう。


Windowsフォーム終了時のイベント順序

先ほどは起動してすぐのイベントでしたが、今度はWindowsフォームアプリケーションを終了したときに順番に発生するイベントを見ていきましょう!

  1. Form.Closing
  2. Form.FormClosing
  3. Form.Closed
  4. Form.FormClosed
  5. Form.Deactivate

このように、アプリケーションを閉じると、メインフォームの「シャットダウンイベント」順番に発生します。

こちらも起動時と同様に、正しい順番で処理を行いたいときには、知っておかなければならないことなので、覚えておきましょう!

IT博士
IT博士

ちなみに、「Applicationクラス」の 「ApplicationExit」というイベントは、上記で紹介したメインフォームのシャットダウンイベントが終わった後に発生するので注意してください。

まとめ

今回は、C#でWindowsフォームアプリケーションを開発する際に発生するイベントには決められた順番があること。その順番についてみていきました。

Loadイベントの後にShownイベントが発生する。など意外と忘れがちなことなので、しっかりと覚えておきましょう。

何かと通信しているようなアプリケーションだと、切断する順番など間違えてしまうと、例外が発生することにもなりかねませんので、イベントの発生順序はこの記事を参考にして、また忘れてしまった時も「FUNA BLOG」の記事に帰ってきて復習してくださいね!

今回のイベント関係の記事もあるのでよかったら見てみてください。

C# コントロールのイベントを一時的に無効化する方法


Copyright© FUNA BLOG , 2020 All Rights Reserved.