.NET TIPS

WPFでコマンドライン引数を取得するには?[C#、VB、2.0、3.0、3.5]

デジタルアドバンテージ 一色 政彦
2009/05/28

 コンソール・アプリケーションやWindowsアプリケーションをコマンドラインから実行するとき、実行可能ファイル(.EXEファイル)の指定に続けて、(オプションとして)引数(以降、コマンドライン引数)を指定することがある。このコマンドライン引数により、アプリケーションの動作を実行ごとやバッチ・ファイル単位でカスタマイズすることが可能になる。このようなコマンドライン引数は、当然、WPF(Windows Application Foundation)アプリケーションでも利用できる。

 これには、まずWPFアプリケーションのApp.xamlファイルに対してStartupイベント・ハンドラを追加する。これは、App.xamlファイルの<Application>タグに「Startup属性」を手動で追加するとよい(Visual Studio利用時)。次の画面は実際にStartup属性を追加しているところだ。

<Application>タグへのStartup属性の追加

 Startup属性を追加しようとすると、上の画面のように、IntelliSenseに[<新しいイベント ハンドラ>]という項目が表示されるので、これをダブルクリックする。

 これにより、App.xamlファイルのコードビハインド・ファイルであるApp.xaml.csにApplication_StartupメソッドがStartupイベント・ハンドラとして追加される。

 このApplication_Startupメソッドには、sender(=object型オブジェクト)とe(=System.Windows名前空間のStartupEventArgsクラスのオブジェクト)の2つのパラメータがあり、StartupEventArgsオブジェクト(=パラメータ「e」)のArgsプロパティにより、コマンドライン引数を文字列型配列として取得できる。

 例えば、コマンドライン引数をチェックして「/mode1」や「/mode2」が指定されている場合にはその文字列を、またそれ以外が指定されている場合は「未知の引数:<指定された引数の内容>」という文字列を、メッセージボックスに表示するコードは次のようになる。

private void Application_Startup(object sender, StartupEventArgs e)
{
  foreach (string arg in e.Args)
  {
    switch (arg)
    {
      case "/mode1":
        MessageBox.Show(arg);
        break;
      case "/mode2":
        MessageBox.Show(arg);
        break;
      default:
        MessageBox.Show("未知の引数:" + arg);
        break;
    }
  }
}
Private Sub Application_Startup(ByVal sender As System.Object, ByVal e As System.Windows.StartupEventArgs)

  For Each arg As String In e.Args
    Select Case arg
      Case "/mode1"
        MessageBox.Show(arg)
      Case "/mode2"
        MessageBox.Show(arg)
      Case Else
        MessageBox.Show("未知の引数:" + arg)
    End Select
  Next

End Sub
コマンドライン引数をチェックしてメッセージボックスで表示するサンプル・コード(上:App.xaml.cs、下:App.xaml.vb)

 このプログラムをコマンドラインから実行する際に、例えば「/mode1 /unkown」というコマンドライン引数を付けると、「/mode1」と表示するメッセージボックスと「未知の引数:/unkown」と表示するメッセージボックスが続けて表示される。End of Article

利用可能バージョン:.NET Framework 2.0以降
カテゴリ:WPF/XAML 処理対象:アプリケーション
使用キーワード:<Application>タグ
使用ライブラリ:StartupEventArgsクラス(System.Windows名前空間)

この記事と関連性の高い別の.NET TIPS
Visual Basic 2005で多重起動禁止時に最初のインスタンスにパラメータを渡すには?
コマンドライン引数を取得するには?
メソッドを呼び出すときに名前付き引数を使うには?[C#/VB]
オプション引数が使えるメソッドを作るには?[C#/VB]
標準入力(パイプ)からテキストを読み込むには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間