将命令行参数传递给按钮文本

时间:2015-11-18 17:53:51

标签: c# arrays winforms command-line-arguments

我创建了一个简单的应用程序来通知用户正在发生的事情。它由一个按钮组成,当命令行传递给它时,它将显示为按钮的text属性。我想要完成的是,如果没有指定命令行参数,它将显示默认消息。我是C#的新手所以要温柔......这就是我到目前为止所拥有的。

private void Form1_Load(object sender, EventArgs e)
    {

        string[] passedinargs = Environment.GetCommandLineArgs();

        if (passedinargs == null)
        {
            btnNotify.Text = "Please Start from Command Line";
        }
        else
        {
            btnNotify.Text = passedinargs[1];
        }

运行时,会给出此执行:

  

Notify.exe中出现未处理的“System.IndexOutOfRangeException”类型异常

突出显示btnNotify.Text = passedinargs[1];

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

  

我想要完成的是,如果没有指定命令行参数,它将显示默认消息。

这表明您应该使用Length属性检查参数的长度。如下所示:

private void Form1_Load(object sender, EventArgs e)
{

    string[] args = Environment.GetCommandLineArgs();

    btnNotify.Text = args.Length < 2
        ? "Please provide an argument on the command line"
        : args[1]; // First command-line argument.
}

我非常确定Environment.GetCommandLineArgs()永远不会返回null。如果你发现它,你可以在条件中使用args == null || args.Length < 2

答案 1 :(得分:1)

passinargs 是一个可能包含1个或多个元素的数组。 第一个元素( passedinargs [0] )始终是可执行文件名,其余(0或更多)是剩余的命令行参数。 如果要使用 passedinargs [1] (这是可执行文件名后的第一个命令行参数),则需要通过选中来验证它是否存在 passedinargs.Length

所以,我的建议是修改你的条件和查询:

if (passedinargs == null || passedinargs.Length < 2)
{
    btnNotify.Text = "Please Start from Command Line";
} 
...