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

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

エントリポイントに記述する方法

アプリケーションの開始時と終了時は、つまり、エントリポイントのMainメソッドに入ってすぐとMainメソッドから抜ける前ということになります。通常は、エントリポイントのMainメソッド内のApplication.Runメソッドを呼び出す前にアプリケーション開始時の処理を、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#のコードをそのまま書いても動かないという方は、こちらをご覧ください。