博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

被忽视的 Application

Posted on 2011-03-21 11:13  gczhao  阅读(238)  评论(0编辑  收藏  举报

本文转自:http://www.rainsts.net/article.asp?id=230

 

.NET Framework 2.0 大大增强了 Application 的功能,使得编写 WinForm 程序更加容易。只是和 Environment 一样,Application 长期被忽视。

1. 路径

StartupPath: 获取应用程序启动路径(不包含文件名)。
如:D:\System\My Documents\Visual Studio 2005\Projects\Learn\Learn.GUI\bin\Debug

ExecutablePath: 获取包含文件名的完整应用程序路径。
如:D:\System\My Documents\Visual Studio 2005\Projects\Learn\Learn.GUI\bin\Debug\Learn.GUI.EXE

CommonAppDataPath: 获取所有用户共享的应用程序数据路径。
如:C:\Documents and Settings\All Users\Application Data\RainTrail Studio.China\Learn.GUI\1.0.0.0

LocalUserAppDataPath: 获取本地、非漫游用户的应用程序数据路径。
如:C:\Documents and Settings\q.yuhen\Local Settings\Application Data\RainTrail Studio.China\Learn.GUI\1.0.0.0

UserAppDataPath: 获取用户的应用程序数据路径。
如:C:\Documents and Settings\q.yuhen\Application Data\RainTrail Studio.China\Learn.GUI\1.0.0.0

UserAppDataRegistry: 获取用户的应用程序数据注册表项。
如:HKEY_CURRENT_USER\Software\RainTrail Studio.China\Learn.GUI\1.0.0.0

2. 属性

OpenForms: 获取应用程序所有已打开窗体集合。使用这个功能,我们就可以很方便地决定是创建新窗体实例还是激活已有实例了。不过要注意 OpenForms 只存储已打开(或打开后隐藏)的窗体。如果将下面例子中的 x.Show() 注释掉,那么 my 的值就为 null。参考《仅显示一个非模式窗体实例

Form x = new Form();
x.Name = "MyForm";
x.Show();
x.Hide();

Form my = Application.OpenForms["MyForm"];
if (my != null)
{
    my.Show();
    my.Activate();
}


UseWaitCursor: 获取或设置是否将等待光标用于应用程序所有打开的窗体。这个属性也非常实用,当应用程序执行一个需要等待的关键应用时,我们就不用为每个打开的窗体设置等待光标了。

3. 方法

AddMessageFilter: 通过添加消息筛选器,我们可以提前拦截一些操作,比如实现键盘钩子之类的。

DoEvents 处理当前在消息队列中的所有 Windows 消息。 这个应用比较多就不多说了。 参考《在WinForm中执行一个“长操作”》。

EnableVisualStyles: 启用应用程序的可视样式。 同样不需要我废话了。 参考《Application.EnableVisualStyles Problem

Exit: 这个还是你自己试吧,当然建议你看看我以前写贴子《Application.Exit()》。

Restart: 关闭应用程序并立即启动新的实例。 这下好了,写自升级程序就简单多了。参考1.1解决方法《自删除 & 自升级》。

Run: 在当前线程上开始运行标准应用程序消息循环。通过自定义 ApplicationContext 类,我们可以做很多和应用程序启动、终止关联的操作。

SetSuspendState: 挂起系统或使系统休眠,或者请求系统挂起或休眠。 这个可以用来写几个恶作剧程序。呵呵

4. 事件

ApplicationExit: 在应用程序即将关闭时发生。

Idle: 当应用程序完成处理并即将进入空闲状态时发生。

ThreadExit: 在某线程即将关闭时发生。当应用程序的主线程即将关闭时,首先引发该事件,随后是 ApplicationExit 事件。