在我们做程序的时候很多程序都需要实现托盘功能,比如我们经常使用的qq等等,那我们如何自己实现托盘功能呢?本文实现了一个简单的托盘功能,直接上实例代码:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace Tuopan
{
class Program
{
static void Main(string[] args)
{
InitNotifyIcon();
new Form().ShowDialog();
}
/// <summary>
/// 声明通知静态实体
/// </summary>
public static readonly NotifyIcon NotifyIcon = new NotifyIcon();
/// <summary>
/// 初始化通知栏图标。
/// </summary>
private static void InitNotifyIcon()
{
List<string> menuItems = new List<string>
{
MenuItems.CONFIG_MENU,
MenuItems.MONITOR_MENU,
MenuItems.INIT_MENU,
MenuItems.EXIT_MENU
};
ContextMenu notifyIconContextMenu = new ContextMenu();
//生成菜单项并添加事件
foreach (MenuItem menuItem in menuItems.Select(item => new MenuItem(item)))
{
menuItem.Click += MenuItem_Click;
notifyIconContextMenu.MenuItems.Add(menuItem);
}
NotifyIcon.Text = "托盘demo程序";
NotifyIcon.BalloonTipShown += NotifyIcon_BalloonTipShown;
NotifyIcon.Icon = new Icon("3.ico");
NotifyIcon.BalloonTipIcon = ToolTipIcon.Info;
NotifyIcon.BalloonTipText = "服务运行中……";
NotifyIcon.BalloonTipTitle = "托盘demo程序";
NotifyIcon.Visible = true;
NotifyIcon.ShowBalloonTip(2000);
NotifyIcon.ContextMenu = notifyIconContextMenu;
}
private static void NotifyIcon_BalloonTipShown(object sender, EventArgs e)
{
NotifyIcon.Text = "托盘demo程序";
}
/// <summary>
/// 通知栏图标的菜单功能方法。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void MenuItem_Click(object sender, EventArgs e)
{
MenuItem menuItem = sender as MenuItem;
if (menuItem == null) return;
switch (menuItem.Text)
{
case MenuItems.CONFIG_MENU:
menuItem.Checked = true;
FormShow("配置界面显示");
menuItem.Checked = false;
break;
case MenuItems.INIT_MENU:
menuItem.Checked = true;
FormShow("初始化界面显示");
menuItem.Checked = false;
break;
case MenuItems.MONITOR_MENU:
menuItem.Checked = true;
FormShow("监控界面显示");
menuItem.Checked = false;
break;
case MenuItems.EXIT_MENU:
Exit();
break;
}
}
private static void FormShow(string text)
{
Form myform=new Form();
myform.Text = text;
myform.ShowDialog();
}
/// <summary>
/// 退出程序
/// </summary>
private static void Exit()
{
if (NotifyIcon != null)
{
NotifyIcon.Visible = false;
NotifyIcon.Dispose();
}
Thread.Sleep(500);
Environment.Exit(0);
}
}
/// <summary>
/// 常量类
/// </summary>
public static class MenuItems
{
#region 通告图标菜单项
public const string CONFIG_MENU = "配置界面";
public const string MONITOR_MENU = "监控界面";
public const string INIT_MENU = "初始化界面";
public const string EXIT_MENU = "退出程序";
#endregion 通告图标菜单项
}
}
运行结果:
[caption id="attachment_873" align="alignnone" width="225"]
![我的托盘](http://vsdot.net/wp-content/uploads/2013/05/tuopan.png)
我的托盘[/caption]
[caption id="attachment_874" align="alignnone" width="681"]
![主界面](http://vsdot.net/wp-content/uploads/2013/05/main.png)
主界面[/caption]
托盘主界面上的窗体是通过右键单击托盘弹出来的对话框。
还是一句话,经过敲上面的代码能够实现一个托盘的程序,但是上面的每一句代码你都懂吗?如果确认懂了自己写一写看看能否写出来,不是实现了,运行了就明白了。