DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

アプリケーションの開始時または終了時に行う処理を記述する

ここでは、アプリケーション(Windowsフォームアプリケーション)が開始した直後、または終了する直前に何かしたい場合、そのコードをどこに書けばよいかについて説明します。

なおここで紹介する方法は、メインフォームが作成される前、あるいは破棄された後に何か行いたい場合に役に立つ方法です。もしメインフォームがロードされた直後、あるいは閉じられた直後でよいのであれば、LoadイベントFormClosedイベントを使用する方法で十分です。

エントリポイントメソッドに記述する方法

アプリケーションが開始すると、まずエントリポイントメソッド(Mainメソッド)が呼び出されます。そして、エントリポイントメソッドから抜けるとアプリケーションが終了します。つまり、アプリケーションの開始時に行う処理はエントリポイントメソッドの先頭に記述し、アプリケーションの終了時に行う処理はエントリポイントメソッドの最後に記述します。

Windowsフォームアプリケーションの場合は、Mainメソッド内にApplication.Runメソッドを呼び出している箇所がありますので、アプリケーション開始時の処理はその前に、アプリケーション終了時の処理はその後に記述すればよいでしょう。

エントリポイントメソッドについて詳しくは「アプリケーションのエントリポイントを自作する」で説明していますので、そちらをご覧ください。

Visual Studio 2005以降のVB.NETで、My.Applicationを使用する方法

Visual Studio 2005以降のVB.NETでは、My.Application.Startupイベントでアプリケーションが開始されたことを知ることができます。また、My.Application.Shutdownイベントでアプリケーションが終了されることを知ることができます。

ただし、これらのイベントを使うためには、アプリケーションフレームワークを有効にしなければなりません。アプリケーションフレームワークを有効にするには、メニューの「プロジェクト」-「プロパティ」でプロジェクトのプロパティを表示し、「アプリケーション」タブにある「アプリケーションフレームワークを有効にする」にチェックを入れます。

これらのイベントハンドラは、"ApplicationEvents.vb"に記述すると便利です。"ApplicationEvents.vb"は、プロジェクトプロパティの「アプリケーション」タブにある「アプリケーションイベントの表示」ボタンをクリックすると表示できます。

"ApplicationEvents.vb"にMy.Application.StartupとShutdownイベントハンドラを記述した例を以下に示します。ここでは、アプリケーションの開始時と終了時にメッセージボックスを表示しています。

VB.NET
コードを隠すコードを選択
Namespace My

    Partial Friend Class MyApplication

        Private Sub MyApplication_Startup(ByVal sender As Object, _
            ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) _
            Handles Me.Startup

            'メッセージボックスでNoを選択すると、アプリケーションを終了
            'この場合、Shutdownイベントは発生しない
            If MsgBox("アプリケーションを開始しますか?", MsgBoxStyle.YesNo) = _
                    MsgBoxResult.No Then
                e.Cancel = True
            End If

            '指定されたコマンドライン引数を列挙
            For Each cmd As String In e.CommandLine
                Console.WriteLine(cmd)
            Next
        End Sub

        Private Sub MyApplication_Shutdown(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Shutdown

            MsgBox("アプリケーションが終了します。")
        End Sub

    End Class

End Namespace

Application.ApplicationExitイベントでアプリケーションの終了を知る方法

Application.ApplicationExitイベントを使用すると、アプリケーションが終了することを知ることができます。ただしこの方法では、アプリケーションの開始を知ることはできません。

以下にその使用例を示します。ここではフォームのLoadイベントハンドラでApplicationExitイベントハンドラを追加していますが、実際には、エントリポイントの適当な位置(Application.Runメソッドを呼び出す前)に記述した方がよいでしょう。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
        Handles MyBase.Load
    'ApplicationExitイベントハンドラを追加
    AddHandler Application.ApplicationExit, AddressOf Application_ApplicationExit
End Sub

'ApplicationExitイベントハンドラ
Private Sub Application_ApplicationExit(ByVal sender As Object, ByVal e As EventArgs)
    MessageBox.Show("アプリケーションが終了されます。")

    'ApplicationExitイベントハンドラを削除
    RemoveHandler Application.ApplicationExit, AddressOf Application_ApplicationExit
End Sub
C#
コードを隠すコードを選択
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //ApplicationExitイベントハンドラを追加
    Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
}

//ApplicationExitイベントハンドラ
private void Application_ApplicationExit(object sender, EventArgs e)
{
    MessageBox.Show("アプリケーションが終了されます。");

    //ApplicationExitイベントハンドラを削除
    Application.ApplicationExit -= new EventHandler(Application_ApplicationExit);
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。