This article is currently in the process of being translated into Japanese (~81% done).
Command-line parameters in WPF
コマンドラインパラメータはスタートしようとしているアプリケーションに一連のパラメータを与え、アプリケーションの動作を変えるテクニックです。最も一般的な例は、エディタのように指定したファイルをオープンさせます。これはWindowsに付属のメモ帳を実行して試すことが出来ます(スタートメニューからRunを選ぶか、[WindowsKey-R]を押します):
notepad.exe c:\Windows\win.ini
これによりwin.iniファイルを開いた状態でメモ帳が開きます(システムに合わせてパスを調整する必要があるかもしれません)。メモ帳は1つまたはいくつかのパラメータを使用するだけですが、あなたのアプリケーションでも同じことが出来ます。
コマンドラインパラメータはApp.xamlの項目でサブスクライブしたStartupイベントを通してWPFアプリケーションに伝えられます。この例で同じことを行います。すなわち、メソッドの引数を通じて渡された値を使います。まず、 App.xamlファイルは:
<Application x:Class="WpfTutorialSamples.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
<Application.Resources></Application.Resources>
</Application>
ここではStartupUriプロパティの代わりにStartupイベントをサブスクライブすることだけ行います。イベントはApp.xaml.csにインプリメントします:
using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTutorialSamples
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
MainWindow wnd = new MainWindow();
if(e.Args.Length == 1)
MessageBox.Show("Now opening file: \n\n" + e.Args[0]);
wnd.Show();
}
}
}
ここではStartupEventArgsを使います。これはアプリケーションのStartupイベントを伝えます。名前はeです。これはstringの配列であるArgsプロパティを持ちます。コマンドラインパラメータはクォーテーションで囲まれない場合はスペースで分解されます。
コマンドラインパラメータのテスト
コマンドラインパラメータが指定されていないので、上記の例を実行しても何も起きません。幸い、Visual Studioにはコマンドラインパラメータを設定してアプリケーションをテストする機能があります。Projectメニューの"[Project name] properties"を選んでDebugタブに行き、ここにコマンドラインパラメータを書きます。これは以下のようになります:
アプリケーションを走らせるとパラメータが表示されるでしょう。
もちろん、これはほとんど役に立ちません。代わりにパラメータをメインウィンドウのコンストラクタに渡すか、パブリックなオープンメソッドを呼び出します:
using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTutorialSamples
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
MainWindow wnd = new MainWindow();
// The OpenFile() method is just an example of what you could do with the
// parameter. The method should be declared on your MainWindow class, where
// you could use a range of methods to process the passed file path
if(e.Args.Length == 1)
wnd.OpenFile(e.Args[0]);
wnd.Show();
}
}
}
コマンドラインの可能性
この例では一つだけの引数があって、それをファイル名の指定に使いました。実際に例では複数の引数があり、それらは例えば特定の機能をON/OFFするオプションとして使います。必要な情報を取得するには、渡された引数のリストをループで回して処理すべきですが、これはこの項目の範囲を超えています。