Windows VistaWindows 2003.NET 1.1.NET 3.0Windows 2000Windows XP.NET 2.0C# 2.0C# 3.0中级开发Visual StudioWindows.NETC#
创建任务托盘应用程序
如何创建一个主要由任务托盘图标组成的应用程序

引言
人们经常发现自己编写一些主要以任务栏图标形式存在的应用程序。这些应用程序可以监视某些内容、更新某些内容,或者是一些在后台运行但希望告知用户其正在运行的应用程序。
到目前为止,我所见过的在互联网上实现此目的的方法是创建配置窗体(其中包含 NotifyIcon
),然后隐藏配置窗体。
然而,这有几个缺点,主要的是配置窗体会在您启动应用程序时闪烁。让它隐藏启动可能有点麻烦。
幸运的是,有一种更好的方法可以将应用程序作为 NotifyIcon
启动:使用 ApplicationContext
。
Using the Code
首先创建一个 WinForms 项目并编辑配置窗体以满足您的需求。完成此操作后,打开 Program.cs。您应该会发现最后一行看起来像这样
Application.Run(new Form1());
这告诉 Application
加载并显示 Form1
,并且只要 Form1
处于活动状态,就保持 Application
处于活动状态。但请看看 Run
的重载。它不仅接受 Form
,还接受 ApplicationContext
。
创建一个新的类,该类继承自 ApplicationContext
(我们将它称为 MyApplicationContext
)。然后用以下内容替换上一行
Application.Run(new MyApplicationContext());
在 MyApplicationContex
的构造函数中,您可以插入代码来初始化 NotifyIcon
。我的代码看起来像这样
MenuItem configMenuItem = new MenuItem("Configuration", new EventHandler(ShowConfig));
MenuItem exitMenuItem = new MenuItem("Exit", new EventHandler(Exit));
NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Icon = TaskTrayApplication.Properties.Resources.AppIcon;
notifyIcon.ContextMenu = new ContextMenu(new MenuItem[]
{ configMenuItem, exitMenuItem });
notifyIcon.Visible = true;
然后,您可以创建一个 ShowConfig
方法来显示配置窗口。我的代码看起来像这样
Configuration configWindow = new Configuration();
void ShowConfig(object sender, EventArgs e)
{
// If we are already showing the window, merely focus it.
if (configWindow.Visible)
{
configWindow.Activate();
}
else
{
configWindow.ShowDialog();
}
}
为了完整起见,我的 Exit
方法看起来像这样
void Exit(object sender, EventArgs e)
{
// We must manually tidy up and remove the icon before we exit.
// Otherwise it will be left behind until the user mouses over.
notifyIcon.Visible = false;
Application.Exit();
}
因此,您现在应该能够创建在任务栏中启动、存在和关闭的应用程序,而无需编写一个用于托管 NotifyIcon
的窗体。
历史
- 07/05/2007
- 提交的文章
- 09/23/2007
- 修复格式
- 将
configWindow.Focus();
更改为configWindow.Activate();