Loading

如何为Windows Forms应用程序添加启动参数(Start-Up Parameters)

很多场合下,我们需要通过命令行或者快捷方式在Windows Forms程序启动时向其传递参数。 这些参数可能是用来加载某一个文档,或者是应用程序的初始化配置文件。 特别是对那些需要高度自定义配置的大程序,经常需要调整运行参数来帮助使用者获得不同的运行结果。

通常,我们可以通过以下两种方式来实现这个需求:

  • 重载入口点函数(Main)
  • 利用Environment类

重载入口点函数(Main)

我们在Visual Studio中创建Windows Forms程序时, VS会自动帮我们创建一个默认的入口点方法——Main。

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

这个入口点函数基本上适用所有程序,但如果想要接收命令行参数,则必须用一个带参数的Main方法来替换它。我们可以简单的向Main方法添加一个string数组参数, 比如:

[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

现在,我们就可以通过这个string数组(args)的值来获取程序启动时传递进来的参数信息。 如果没有传递任何参数,则这个数组为空。否则,每一个参数对应数组中的一个元素,这些参数用空格符来分隔。

利用Environment类

第二种获取应用程序启动参数的方式就是使用Environment类。 我们可以在System命名空间下找到Environment类,类中包含一个叫GetCommandLineArgs()的方法。 此方法会返回一个string数组,而数组的第一个值是程序的文件名(这也是两种方法所获取的参数的区别)。 如果可用,则其他元素就是通过命令行传递过来的参数。

注: 命令行可以通过快捷方式来配置,比如:

示例程序

为了分别演示利用这两种方法来向向Windows Forms程序传递启动参数,我通过一个简单的程序来说明。

  • 创建一个Windows Form Application。
  • 新建两个Form,分别向其中添加一个RichTextBox控件,然后将RichTextBox控件的Dock属性设置为DockStyle.Fill。
  • 修改Program.cs中的入口点函数,如下:
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
    
        Form form;
        
    // 如果第一个参数为Form1则程序会打开Form1窗体,否则则打开Form2窗体。 if (args != null && args.Length > 0 && args[0] == "Form1") { form = new Form1(); ((Form1)form).CommandArguments = args; } else { form = new Form2(); ((Form2)form).CommandArguments = System.Environment.GetCommandLineArgs(); } Application.Run(form); }  
  • 然后分别在两个Form加载时,读取传递的参数,然后显示在RichTextBox中。下面是Form1的代码:
    public partial class Form1 : Form
    {
        public string[] CommandArguments { get; set; }
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            if (CommandArguments != null)
            {
                foreach (var item in CommandArguments)
                {
                    richTextBox1.AppendText(item);
                    richTextBox1.AppendText(Environment.NewLine);
                }
            }
        }
    }
    
  • 有两种方法设置参数,一是通过快捷方式;另一个是通过命令行来执行exe文件时传递。两种方法得到的结果是一样的,如下:
  • 代码下载: http://pan.baidu.com/s/1i3xb74T

参考文献

posted @ 2014-07-21 16:25  光脚码农  阅读(3205)  评论(0编辑  收藏  举报