AppAとAppBの2つの異なるWinFormsアプリケーションがあります。どちらも.NET 2.0を実行しています。
AppAでAppBを開きたいのですが、コマンドライン引数をそれに渡す必要があります。コマンドラインで渡す引数をどのように使用しますか?
これはAppBでの現在のメインメソッドですが、これを変更できないと思いますか?
static void main()
{
}
AppAとAppBの2つの異なるWinFormsアプリケーションがあります。どちらも.NET 2.0を実行しています。
AppAでAppBを開きたいのですが、コマンドライン引数をそれに渡す必要があります。コマンドラインで渡す引数をどのように使用しますか?
これはAppBでの現在のメインメソッドですが、これを変更できないと思いますか?
static void main()
{
}
回答:
static void Main(string[] args)
{
// For the sake of this example, we're just printing the arguments to the console.
for (int i = 0; i < args.Length; i++) {
Console.WriteLine("args[{0}] == {1}", i, args[i]);
}
}
引数はargs
文字列配列に格納されます:
$ AppB.exe firstArg secondArg thirdArg
args[0] == firstArg
args[1] == secondArg
args[2] == thirdArg
winformsアプリの引数を使用する最良の方法は、
string[] args = Environment.GetCommandLineArgs();
おそらくこれを列挙型の使用と組み合わせて、コードベース全体で配列の使用を強化することができます。
「そして、あなたはあなたのアプリケーションのどこでもこれを使うことができます、あなたはそれをコンソールアプリケーションのようにmain()メソッドで使うことに制限されているだけではありません。」
見つけた場所:ここ
main(string[] args)
か?
2つの引数を渡す必要があるプログラムを開発する必要があると考えてください。まず、Program.csクラスを開き、Mainメソッドに次のように引数を追加して、これらの引数をWindowsフォームのコンストラクターに渡す必要があります。
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args[0], Convert.ToInt32(args[1])));
}
}
Windowsフォームクラスで、次のようにProgramクラスからの入力値を受け入れるパラメーター化されたコンストラクターを追加します。
public Form1(string s, int i)
{
if (s != null && i > 0)
MessageBox.Show(s + " " + i);
}
これをテストするには、コマンドプロンプトを開き、このexeが配置されている場所に移動します。ファイル名、次にparmeter1 parameter2を指定します。たとえば、以下を参照してください
C:\MyApplication>Yourexename p10 5
上記のC#コードから、メッセージボックスに値を入力しますp10 5
。
次のシグネチャを使用します:(c#の場合)static void Main(string [] args)
この記事は、プログラミングにおけるmain関数の役割を説明するのにも役立ちます:http : //en.wikipedia.org/wiki/Main_function_( programming )
ここにあなたのための小さな例があります:
class Program
{
static void Main(string[] args)
{
bool doSomething = false;
if (args.Length > 0 && args[0].Equals("doSomething"))
doSomething = true;
if (doSomething) Console.WriteLine("Commandline parameter called");
}
}
これは一般的なソリューションではないかもしれませんが、C#を使用している場合でも、Visual Basicのアプリケーションフレームワークが好きです。
への参照を追加 Microsoft.VisualBasic
WindowsFormsApplicationというクラスを作成します
public class WindowsFormsApplication : WindowsFormsApplicationBase
{
/// <summary>
/// Runs the specified mainForm in this application context.
/// </summary>
/// <param name="mainForm">Form that is run.</param>
public virtual void Run(Form mainForm)
{
// set up the main form.
this.MainForm = mainForm;
// Example code
((Form1)mainForm).FileName = this.CommandLineArgs[0];
// then, run the the main form.
this.Run(this.CommandLineArgs);
}
/// <summary>
/// Runs this.MainForm in this application context. Converts the command
/// line arguments correctly for the base this.Run method.
/// </summary>
/// <param name="commandLineArgs">Command line collection.</param>
private void Run(ReadOnlyCollection<string> commandLineArgs)
{
// convert the Collection<string> to string[], so that it can be used
// in the Run method.
ArrayList list = new ArrayList(commandLineArgs);
string[] commandLine = (string[])list.ToArray(typeof(string));
this.Run(commandLine);
}
}
Main()ルーチンを次のように変更します
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var application = new WindowsFormsApplication();
application.Run(new Form1());
}
}
このメソッドは、いくつかの便利な機能を追加します(SplashScreenサポートやいくつかの便利なイベントなど)。
public event NetworkAvailableEventHandler NetworkAvailabilityChanged;d.
public event ShutdownEventHandler Shutdown;
public event StartupEventHandler Startup;
public event StartupNextInstanceEventHandler StartupNextInstance;
public event UnhandledExceptionEventHandler UnhandledException;