C# 如何将命令行参数传递给 WinForms 应用程序?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1179532/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I pass command-line arguments to a WinForms application?
提问by MRFerocius
I have two different WinForms applications, AppA & AppB. Both are running .NET 2.0.
我有两个不同的 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?
在 AppA 中,我想打开 AppB,但我需要将命令行参数传递给它。如何使用我在命令行中传递的参数?
This is my current main method in AppB, but I don't think you can change this?
这是我目前在 AppB 中的主要方法,但我认为您无法更改它?
static void main()
{
}
采纳答案by Thomas
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]);
}
}
The arguments will then be stored in the args
string array:
然后参数将存储在args
字符串数组中:
$ AppB.exe firstArg secondArg thirdArg
args[0] == firstArg
args[1] == secondArg
args[2] == thirdArg
回答by JaredPar
You can grab the command line of any .Net application by accessing the Environment.CommandLine property. It will have the command line as a single string but parsing out the data you are looking for shouldn't be terribly difficult.
您可以通过访问 Environment.CommandLine 属性来获取任何 .Net 应用程序的命令行。它会将命令行作为单个字符串,但解析出您要查找的数据应该不会非常困难。
Having an empty Main method will not affect this property or the ability of another program to add a command line parameter.
拥有一个空的 Main 方法不会影响此属性或另一个程序添加命令行参数的能力。
回答by chrisghardwick
You use this signature: (in c#) static void Main(string[] args)
您使用此签名:(在 c# 中) static void Main(string[] args)
This article may help to explain the role of the main function in programming as well: http://en.wikipedia.org/wiki/Main_function_(programming)
这篇文章也可能有助于解释 main 函数在编程中的作用:http: //en.wikipedia.org/wiki/Main_function_(programming )
Here is a little example for you:
这是给你的一个小例子:
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");
}
}
回答by Hannibul33
The best way to work with args for your winforms app is to use
为您的 winforms 应用程序使用 args 的最佳方法是使用
string[] args = Environment.GetCommandLineArgs();
You can probably couple this with the use of an enumto solidify the use of the array througout your code base.
您可能可以将此与枚举的使用结合起来,以巩固整个代码库中数组的使用。
"And you can use this anywhere in your application, you aren't just restricted to using it in the main() method like in a console application."
“而且你可以在应用程序的任何地方使用它,你不仅限于在 main() 方法中使用它,就像在控制台应用程序中一样。”
Found at:HERE
发现于:这里
回答by Jürgen Steinblock
This may not be a popular solution for everyone, but I like the Application Framework in Visual Basic, even when using C#.
这可能不是每个人都喜欢的解决方案,但我喜欢 Visual Basic 中的应用程序框架,即使在使用 C# 时也是如此。
Add a reference to Microsoft.VisualBasic
添加引用 Microsoft.VisualBasic
Create a class called WindowsFormsApplication
创建一个名为 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
将 Main() 例程修改为如下所示
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var application = new WindowsFormsApplication();
application.Run(new Form1());
}
}
This method offers some additional usefull features (like SplashScreen support and some usefull events)
此方法提供了一些额外的有用功能(如 SplashScreen 支持和一些有用的事件)
public event NetworkAvailableEventHandler NetworkAvailabilityChanged;d.
public event ShutdownEventHandler Shutdown;
public event StartupEventHandler Startup;
public event StartupNextInstanceEventHandler StartupNextInstance;
public event UnhandledExceptionEventHandler UnhandledException;
回答by Sarath Avanavu
Consider you need to develop a program through which you need to pass two arguments. First of all, you need to open Program.csclass and add arguments in the Mainmethod as like below and pass these arguments to the constructor of the Windows form.
考虑您需要开发一个程序,您需要通过该程序传递两个参数。首先,您需要打开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])));
}
}
In windows form class, add a parameterized constructor which accepts the input values from Programclass as like below.
在 windows 窗体类中,添加一个参数化构造函数,它接受来自Program类的输入值,如下所示。
public Form1(string s, int i)
{
if (s != null && i > 0)
MessageBox.Show(s + " " + i);
}
To test this, you can open command prompt and go to the location where this exe is placed. Give the file name then parmeter1 parameter2. For example, see below
要对此进行测试,您可以打开命令提示符并转到放置此 exe 的位置。给出文件名,然后参数 1 参数 2。例如,见下文
C:\MyApplication>Yourexename p10 5
From the C# code above, it will prompt a Messagebox with value p10 5
.
从上面的 C# 代码中,它会提示一个带有 value 的 Messagebox p10 5
。