如何为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
参考文献
如何为Windows Forms应用程序添加启动参数(Start-Up Parameters)的更多相关文章
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- IOS编程教程(八):在你的应用程序添加启动画面
IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...
- C# WinForm程序添加启动画面
如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...
- 体验Visual Studio 2015 Windows Forms应用程序开发与维护
昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...
- Windows任务计划程序起始于参数自动修改
Windows任务计划程序建立后,手工运行可以成功,但计划任务自动运行却不能成功,搜索网络,原来是起始于参数没有配置,这个参数的英文名字是start-in.它保证任务计划程序的WorkingDirec ...
- 技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数
前言 在部分场景下,需要向小程序的默认接收页(pages/index/index)传递参数. 本文将以传递 name 和 pwd 参数为例,分别介绍此场景在 Android 小程序和 iOS 小程序中 ...
- 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.网络监听配置 ...
- Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架
最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...
- WPF、Windows Forms和Silverlight间的联系和区别(转)
WPF.Windows Forms和Silverlight间的联系和区别http://blog.csdn.net/bitfan/article/details/6128391 .NET Windows ...
随机推荐
- Android-事件分发(OnTouchEvent,OnTouch,OnClick)
http://blog.csdn.net/lmj623565791/article/details/38960443 http://blog.csdn.net/guolin_blog/article/ ...
- NIO,AIO,BIO
同步和异步:同步和异步关注的是消息通信机制, 同步:就是在发出一个“调用”时,在没有得到结果之前,该“调用”就不返回,但是一旦调用返回,就得到返回值了;换句话说:就是由“调用者”主动等待“调用”结果 ...
- SparseArray类
继续阅读SparseArray的源码,从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: public SparseArray() { this(10); } p ...
- 【CDQ分治】[HNOI2010]城市建设
题目链接 线段树分治+LCT只有80 然后就有了CDQ分治的做法 把不可能在生成树里的扔到后面 把一定在生成树里的扔到并查集里存起来 分治到l=r,修改边权,跑个kruskal就行了 由于要支持撤销, ...
- 【代码笔记】iOS-增加右侧按钮
一,工程图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...
- 【代码笔记】iOS-去掉NSString中的空格
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...
- <Android开源库> PagerSlidingTabStrip从头到脚
简介 PagerSlidingTabStrip,是我个人经常使用到的一个和ViewPager配合的页面指示器,可以满足开发过程中常用的需求,如类似于今日头条的首页新闻内容导航栏等等,之前自己开发的Ju ...
- 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll
一.问题描述 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll 二.解决方法 首先进入 http://www.microsoft.com/zh-CN/download/det ...
- Nginx的虚拟主机
1.虚拟主机的概念和类型 1.1 概念: 所谓的虚拟主机,在web服务里面就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立的对外提供服务. ...
- SoapUI 接口测试之post提交本地数据文件
SoapUI接口测试之post提交本地数据文件 by:授客 QQ:1033553122 本文主要是针对用SoapUI POST提交本地数据文件的方法做个简单介绍 举例: 文件同步接口 接口地址:htt ...