如何将命令行parameter passing给WinForms应用程序?

我有两个不同的WinForms应用程序,AppA和AppB。 两者都运行.NET 2.0。

在AppA中,我想打开AppB,但是我需要将命令行parameter passing给它。 我如何使用在命令行中传递的参数?

这是我目前在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]); } } 

参数将被存储在argsstring数组中:

 $ AppB.exe firstArg secondArg thirdArg args[0] == firstArg args[1] == secondArg args[2] == thirdArg 

使用你的winforms应用程序的args的最好方法是使用

 string[] args = Environment.GetCommandLineArgs(); 

你也许可以通过使用一个枚举来加强这个数组的使用,通过你的代码库。

“你可以在你的应用程序的任何地方使用它,你不仅仅限于在控制台应用程序中使用main()方法。”

发现在: 这里

您可以通过访问Environment.CommandLine属性来获取任何.Net应用程序的命令行。 它将命令行作为一个单一的string,但parsing出你正在寻找的数据不应该是非常困难的。

拥有一个空的Main方法不会影响此属性或另一个程序添加命令行参数的能力。

你使用这个签名:(在C#)静态无效的主要(string[]参数)

本文可能有助于解释编程中主要function的作用: 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"); } } 

这可能不是一个受欢迎的解决scheme,但是我喜欢Visual Basic中的应用程序框架,即使在使用C#时也是如此。

添加对Microsoft.VisualBasic的引用

创build一个名为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()); } } 

此方法提供了一些额外的有用function(如SplashScreen支持和一些有用的事件)

 public event NetworkAvailableEventHandler NetworkAvailabilityChanged;d. public event ShutdownEventHandler Shutdown; public event StartupEventHandler Startup; public event StartupNextInstanceEventHandler StartupNextInstance; public event UnhandledExceptionEventHandler UnhandledException; 

考虑你需要开发一个程序,通过它你需要传递两个参数。 首先,需要像下面那样打开Program.cs类并在Main方法中添加参数,并将这些parameter passing给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类的input值,如下所示。

 public Form1(string s, int i) { if (s != null && i > 0) MessageBox.Show(s + " " + i); } 

为了testing这个,你可以打开命令提示符,并进入这个exe文件所在的位置。 给出文件名,然后给出参数1参数2。 例如,见下面

 C:\MyApplication>Yourexename p10 5 

从上面的C#代码,它会提示一个值为p10 5的消息框。