.NET TIPS

Windowsフォームの表示直後に初期化処理を行うには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2006/07/07

 Windowsフォームにおいては、アプリケーションの初期化処理はフォームのコンストラクタやLoadイベント・ハンドラ(例えば「Form1_Load」メソッド)で行うことが通常だ。しかしフォーム自体に関する初期化処理は、これらのタイミングで行えない場合がある。

 これは、コンストラクタやLoadイベント・ハンドラが呼び出されるときには、まだフォームが表示されていないことに起因する。この問題を回避するには、.NET Framework 1.xでは、フォームがアクティブになった直後に発生するActivatedイベントが使えた。例えば1.x向けの「TIPS:マウス・カーソルの移動可能領域を制限するには?」では、このイベントを利用して、初期化処理を行っている。

 しかしActivatedイベントはウィンドウがアクティブになるたびに発生するため、フォームの表示直後に一度だけ処理を行いたい場合には、フラグを立てるなどの処理が必要であった。

フォーム表示直後に一度だけ発生するShownイベント

 .NET Framework 2.0では、新しくShownイベントがフォームに追加されている。これはフォームが表示された直後に一度だけ発生するイベントだ。

 これらのイベントがどのようなタイミングで発生するのかを確かめるために、Windowsアプリケーションで以下のような3つのイベント・ハンドラを追加したとしよう。

// Loadイベント・ハンドラ
private void Form1_Load(object sender, EventArgs e) {
  System.Diagnostics.Debug.WriteLine(
    DateTime.Now + " Loadイベント");
}

// Activatedイベント・ハンドラ
private void Form1_Activated(object sender, EventArgs e) {
  System.Diagnostics.Debug.WriteLine(
    DateTime.Now + " Activatedイベント");
}

// Shownイベント・ハンドラ
private void Form1_Shown(object sender, EventArgs e) {
  System.Diagnostics.Debug.WriteLine(
    DateTime.Now + " Shownイベント");
}
' Loadイベント・ハンドラ
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  System.Diagnostics.Debug.WriteLine( _
    DateTime.Now + " Loadイベント")
End Sub

' Activatedイベント・ハンドラ
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Activated
  System.Diagnostics.Debug.WriteLine( _
    DateTime.Now + " Activatedイベント")
End Sub

' Shownイベント・ハンドラ
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown
  System.Diagnostics.Debug.WriteLine( _
    DateTime.Now + " Shownイベント")
End Sub
イベント発生時にメッセージを出力するLoad/Activated/Shownイベント・ハンドラ(上:C#、下:VB)

 アプリケーションを起動し、何度かウィンドウの非アクティブ/アクティブ化を行った結果、上記のコードにより出力されるデバッグ・メッセージは次のようになった。

2006/07/06 16:06:30 Loadイベント
2006/07/06 16:06:30 Activatedイベント
2006/07/06 16:06:30 Shownイベント
2006/07/06 16:06:41 Activatedイベント
2006/07/06 16:06:44 Activatedイベント
……以下省略……
上記のコードにより出力されるデバッグ・メッセージの例
アプリケーションの起動後はまずLoadおよびActivatedイベントが発生するが、その直後にはShownイベントが発生する。そしてそれ以降はShownイベントは発生しない。Activatedイベントはウィンドウの非アクティブ/アクティブ化を行うたびに発生する。

 この結果から分かるように、アプリケーションの起動後はまずLoadイベントとActivatedイベントが発生するが、その直後にShownイベントが発生する。そしてそれ以降はShownイベントが発生することはない。

 ちなみに、アプリケーションの起動後に、フォームのHideメソッド/Showメソッドによりウィンドウの非表示/表示を行ってもShownイベントは発生しない。Shownイベントが発生するのは、フォームの表示直後に一度だけである。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:ウィンドウ
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
関連TIPS:マウス・カーソルの移動可能領域を制限するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールですべての行にアクセスするには?
[ASP.NET]ポストとポストバックの違いは?
マウス・カーソルの移動可能領域を制限するには?
コントロールに対するキー入力をフォームで処理するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH