C#基础温习(10):C#实现托盘功能

在我们做程序的时候很多程序都需要实现托盘功能,比如我们经常使用的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"]我的托盘 我的托盘[/caption] [caption id="attachment_874" align="alignnone" width="681"]主界面 主界面[/caption] 托盘主界面上的窗体是通过右键单击托盘弹出来的对话框。 还是一句话,经过敲上面的代码能够实现一个托盘的程序,但是上面的每一句代码你都懂吗?如果确认懂了自己写一写看看能否写出来,不是实现了,运行了就明白了。  
原文地址:https://www.cnblogs.com/vsdot/p/3263369.html