如何向 WinForms 应用程序传递命令行参数?

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

In AppA I want to open AppB, but I need to pass command-line arguments to it. How do I consume the arguments that I pass in the command line?

这是我目前的主要方法在应用程序,但我不认为你可以改变这一点?

  static void main()
{
}
205068 次浏览
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

您可以获取任何。网络应用程序访问环境。CommandLine 属性。它将命令行作为一个单独的字符串,但是解析您正在查找的数据应该不会非常困难。

Having an empty Main method will not affect this property or the ability of another program to add a command line parameter.

您可以使用这个签名: (在 c # 中) static void Main (string [] args)

本文也许有助于解释主函数在编程中的作用: 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");
}
}

使用 winform 应用程序的 args 的最佳方法是使用

string[] args = Environment.GetCommandLineArgs();

您可以将这一点与使用 枚举结合起来,以便在整个代码库中巩固数组的使用。

“您可以在应用程序的任何地方使用它,您不仅仅是 仅限于像在控制台中那样在 main ()方法中使用它 申请。」

发现地点: 给你

这可能不是每个人都喜欢的解决方案,但是我喜欢 Visual Basic 中的 Application Framework,即使在使用 C # 时也是如此。

Add a reference to 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);
}


}

Modify your Main() routine to look like this

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;

考虑到您需要开发一个程序,通过它您需要传递两个参数。首先,您需要像下面这样打开 Program.cs类并在 总部方法中添加参数,然后将这些参数传递给 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 表单类中,添加一个参数化构造函数,该构造函数接受来自 程序类的输入值,如下所示。

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

要测试这一点,可以打开命令提示符并转到放置这个 exe 的位置。给出文件名,然后给出 parmeter1参数2。例如,见下文

C:\MyApplication>Yourexename p10 5

从上面的 C # 代码,它将提示值为 p10 5的 Messagebox。