很多场合下,我们需要通过命令行或者快捷方式在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

参考文献

如何为Windows Forms应用程序添加启动参数(Start-Up Parameters)的更多相关文章

  1. C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...

  2. IOS编程教程(八):在你的应用程序添加启动画面

    IOS编程教程(八):在你的应用程序添加启动画面   虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...

  3. C# WinForm程序添加启动画面

    如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...

  4. 体验Visual Studio 2015 Windows Forms应用程序开发与维护

    昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...

  5. Windows任务计划程序起始于参数自动修改

    Windows任务计划程序建立后,手工运行可以成功,但计划任务自动运行却不能成功,搜索网络,原来是起始于参数没有配置,这个参数的英文名字是start-in.它保证任务计划程序的WorkingDirec ...

  6. 技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

    前言 在部分场景下,需要向小程序的默认接收页(pages/index/index)传递参数. 本文将以传递 name 和 pwd 参数为例,分别介绍此场景在 Android 小程序和 iOS 小程序中 ...

  7. Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作

    Oracle 远程访问配置   服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 ...

  8. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  9. WPF、Windows Forms和Silverlight间的联系和区别(转)

    WPF.Windows Forms和Silverlight间的联系和区别http://blog.csdn.net/bitfan/article/details/6128391 .NET Windows ...

随机推荐

  1. Java - List总结

    Java提高篇(三二)-----List总结 前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List ...

  2. 【13】享元模式(FlyWeight Pattern)

    一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,若重复地使用new创建这个对象的话,就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重.享元模式可以 ...

  3. 关于UltraWinGrid选中行只读设置

    刚开始设置了 一些属性不起作用,后来检查下属性发现一旦对DataSource赋值 则属性会被重置 如果是通过绑定DataSet的方式 则需要再后面设置 ].Override.CellClickActi ...

  4. 排序算法(9)--Distribution Sorting--分布排序[1]--Counting sort--计数器排序

    1.基本思想 假设数序列中小于元素a的个数为n,则直接把a放到第n+1个位置上.当存在几个相同的元素时要做适当的调整,因为不能把所有的元素放到同一个位置上.计数排序假设输入的元素都是0到k之间的整数. ...

  5. tinyint、smallint、bigint、int 区别

    1byte=8bit   [tinyint] 从 0 到 255 的整型数据.存储大小为 1 字节.如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数. [smallint] ...

  6. 自定义适用于手机和平板电脑的 Dynamics 365(三):显示的实体

    您可以启用 适用于手机的 Dynamics 365 和 适用于平板电脑的 Dynamics 365 的有限实体集. 若要查看是否启用了实体,或者要启用实体,请单击“设置”>“自定义”>“自 ...

  7. Flutter开发中的几个常用函数

    几个Flutter开发中的常用函数 /** 返回当前时间戳 */ static int currentTimeMillis() { return new DateTime.now().millisec ...

  8. 安卓测试【一】android sdk环境变量配置

    移动应用自动化测试的配置,先于官网下载Android SDK,然后配置环境变量. 配置android sdk环境变量 1.  新建ANDROID_HOME环境变量,变量值为SDK解压的路径 2. 追加 ...

  9. Android--监听View的两个指头是放大和缩小

    private double nLenStart = 0;//监听 WebView所用手势 @Override public boolean onTouch(View v, MotionEvent e ...

  10. create-react-app脚手架的安装和目录结构介绍

    1.对脚手架的初步了解 编程领域中的“脚手架”指的是能够快速搭建项目“骨架”的一类工具,例如大多数的React项目都有src,public,webpack配置文件等等,而src目录中又包含compon ...