C# 在Windows窗体中使用的命令行参数

C# 在Windows窗体中使用的命令行参数,c#,winforms,command-line-arguments,C#,Winforms,Command Line Arguments,我有一个C Windows窗体应用程序,我正在做很多复选框,并将它们写入和读取到名为test.JSON的JSON格式文件中。现在我想将test.json与program.exe一起使用,我的program.exe将被选中,就像在test.json中编写的一样。因此,我创建了加载事件处理程序,并希望使用GetCommandLineArgs 我知道我有2个参数[0]-program.exe和[1]-test.json。需要一些如何使它工作的想法 我的问题是: 如何使args列出2个元素。其中0为pr

我有一个C Windows窗体应用程序,我正在做很多复选框,并将它们写入和读取到名为test.JSON的JSON格式文件中。现在我想将test.json与program.exe一起使用,我的program.exe将被选中,就像在test.json中编写的一样。因此,我创建了加载事件处理程序,并希望使用GetCommandLineArgs

我知道我有2个参数[0]-program.exe和[1]-test.json。需要一些如何使它工作的想法

我的问题是:

如何使args列出2个元素。其中0为program.exe,1为test.json。以及在可能没有参数或只有一个参数时如何使用args.length

如何使args列表包含2个元素。其中0为program.exe,1为test.json

为此,可以在visual studio中通过打开“项目属性”窗口并导航到“调试”选项卡进行调试,从中可以指定所需的命令行参数,如下所示:

您可以使用Environment.GetCommandLineArgs,在我看来这有点奇怪。它向您提供当前正在运行的可执行文件名。所以在你的情况下,你最终会得到你想要的东西

[0] - program.exe and [1] - test.json
当可能没有参数或只有一个参数时,如何使用args.Length

这很简单,Environment.GetCommandLineArgs返回字符串[]。检查所需长度,并进行相应处理

var commandLineArgs = Environment.GetCommandLineArgs();
if (commandLineArgs.Length > 0)
{
    // Do something magical...
}
else
{
    // Nothing was passed in...
}
如何使args列表包含2个元素。其中0为program.exe,1为test.json

为此,可以在visual studio中通过打开“项目属性”窗口并导航到“调试”选项卡进行调试,从中可以指定所需的命令行参数,如下所示:

您可以使用Environment.GetCommandLineArgs,在我看来这有点奇怪。它向您提供当前正在运行的可执行文件名。所以在你的情况下,你最终会得到你想要的东西

[0] - program.exe and [1] - test.json
当可能没有参数或只有一个参数时,如何使用args.Length

这很简单,Environment.GetCommandLineArgs返回字符串[]。检查所需长度,并进行相应处理

var commandLineArgs = Environment.GetCommandLineArgs();
if (commandLineArgs.Length > 0)
{
    // Do something magical...
}
else
{
    // Nothing was passed in...
}
大概是这样的:

var cmdArgs = Environment.GetCommandLineArgs();

if (cmdArgs.Length < 2) 
{
    MessageBox.Show("No JSON file specified!");
}

var jsonFilename = cmdArgs[1];
如果您执行更复杂的命令行参数解析,我建议使用现有的库,如

更新:

在这里,您可以通过双击来附加事件处理程序或创建新的事件处理程序:

大概是这样的:

var cmdArgs = Environment.GetCommandLineArgs();

if (cmdArgs.Length < 2) 
{
    MessageBox.Show("No JSON file specified!");
}

var jsonFilename = cmdArgs[1];
如果您执行更复杂的命令行参数解析,我建议使用现有的库,如

更新:

在这里,您可以通过双击来附加事件处理程序或创建新的事件处理程序:


有没有可能不接触主要方法?我希望加载事件处理程序中的所有内容。还有一个问题,如何处理?如果我知道我的args.Length=1没有给出参数,args.Length=2只给出了一个参数。感谢它提供了非常丰富的信息和帮助,但是当我使用命令行时,它只是简单地运行我的program.exe,没有发生任何特别的事情。也许我做错了什么?即使我只放了program.exe或者我也放了test.json,它也会简单地运行program.exe。我相信我确实正确地回答了您的具体问题,尽管如此。听起来您可能还有其他问题-可能test.json文件丢失或在本地找不到,或者其他问题。我建议你接受这个答案,并针对你看到的其他问题创建另一个答案。好的,最后一个问题。我在一个目录中进行编码,我的项目将program.exe和test.json放在另一个目录中。这会影响我的问题吗?是的,这是一个问题。。。test.json文件必须位于执行program.exe的同一目录中,除非完全限定文件路径。如果你认为我的回答是正确的,请接受我的回答。有没有可能不触及主要方法?我希望加载事件处理程序中的所有内容。还有一个问题,如何处理?如果我知道我的args.Length=1没有给出参数,args.Length=2只给出了一个参数。感谢它提供了非常丰富的信息和帮助,但是当我使用命令行时,它只是简单地运行我的program.exe,没有发生任何特别的事情。也许我做错了什么?即使我只放了program.exe或者我也放了test.json,它也会简单地运行program.exe。我相信我确实正确地回答了您的具体问题,尽管如此。听起来您可能还有其他问题-可能test.json文件丢失或在本地找不到,或者其他问题。我建议你接受这个答案,并针对你看到的其他问题创建另一个答案。好的,最后一个问题。我在一个目录中进行编码,我的项目将program.exe和test.json放在另一个目录中。这会影响我的问题吗?是的,这是一个问题。。。t
est.json文件必须位于执行program.exe的同一目录中,除非完全限定文件路径。如果您认为答案正确,请接受我的回答。在第二个参数中发送json文件路径您的意思是var path=args[1]?在第二个参数中发送json文件路径您的意思是var path=args[1]?我喜欢您的建议:但当我使用命令行时,它的工作原理与不使用Getcommandline时相同。它使我的程序运行简单。也许我做错了什么?你有没有看一下调试器?请参见David Pines回答如何在Visual Studio内的调试中设置命令行参数。然后在var cmdArgs=..上设置断点。。。。。你有你的参数吗?我已经在Winforms应用程序中测试了上面的代码。如果将其放入FormLoad eventhandler中,则会按预期工作。到底是什么问题?我想我的问题是我不知道如何让我的事件持有者加载。应该是这样的。Load+=Form1\u Load;是的,没错。无需编码即可执行此操作:在设计器中选择表单。切换到属性F4并切换到“事件”选项卡,然后搜索名为“加载”的事件。从下拉列表中选择Form1_加载方法。如果您还没有:双击输入框,Visual Studio将为您创建一个新的输入框,并将其注册为+=。我喜欢您提供的功能:但当我使用命令行时,它的工作原理与不使用Getcommandline时相同。它使我的程序运行简单。也许我做错了什么?你有没有看一下调试器?请参见David Pines回答如何在Visual Studio内的调试中设置命令行参数。然后在var cmdArgs=..上设置断点。。。。。你有你的参数吗?我已经在Winforms应用程序中测试了上面的代码。如果将其放入FormLoad eventhandler中,则会按预期工作。到底是什么问题?我想我的问题是我不知道如何让我的事件持有者加载。应该是这样的。Load+=Form1\u Load;是的,没错。无需编码即可执行此操作:在设计器中选择表单。切换到属性F4并切换到“事件”选项卡,然后搜索名为“加载”的事件。从下拉列表中选择Form1_加载方法。如果您还没有:双击输入框,VisualStudio将为您创建一个新的输入框,并将其注册为+=。