在C#实现托盘效果(转)

桌面程序的开发中,经常考虑能在状态栏实现托盘快捷操作,托盘程序的实现在API时代,还是相对复杂的,首先在MSDN中可以查看其函数细节,

然后在根据其要求的参数进行复杂的设置。
      在.NET时代,MS封装了这些麻烦的细节,开发者可以很容易的实现托盘程序的控制和操作。现以简单的实例为例来说明:
      1.添加notifyIcon控件和contextMenuStrip控件
      2.设置其属性icon和contextMenuStrp属性,Icon属性只需选择一个托盘图标,contextMenuStrip用于关联第一步的快捷菜单。
      3.添加窗体的SizeChanged事件程序,用于实现窗体最小化时调用托盘:
            if (this.WindowState == FormWindowState.Minimized)
            {
                //this.Hide();        //可以要,也可以不要,取决于是否隐藏主窗体

      //隐藏任务栏区图标

       this.ShowInTaskbar = false;
                this.notifyIcon.Visible = true;
            }
       4.添加notifyIcon的Click事件,打开快捷菜单项,或者其他更复杂的操作选项,根据需要而定。    

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 
10 namespace TimeAssist
11 {
12     public partial class Form1 : Form
13     {
14         public Form1()
15         {
16             InitializeComponent();
17             //托盘区图标隐藏 
18             notifyIcon.Visible = false;
19         }
20 
21         private void Form1_SizeChanged(object sender, EventArgs e)
22         {
23             if (this.WindowState == FormWindowState.Minimized)
24             {
25                 //this.Hide();        //可以要,也可以不要,取决于是否隐藏主窗体
26                 //隐藏任务栏区图标
27                 this.ShowInTaskbar = false;
28                 //图标显示在托盘区
29                 notifyIcon.Visible = true;
30             }
31         }
32 
33         private void notifyIcon_DoubleClick(object sender, EventArgs e)
34         {
35             showMainWindow();
36         }
37 
38         private void showMainWindow()
39         {
40             //判断是否已经最小化于托盘 
41             if (WindowState == FormWindowState.Minimized)
42             {
43                 //还原窗体显示 
44                 WindowState = FormWindowState.Normal;
45 
46                 //激活窗体并给予它焦点 
47                 this.Activate();
48                 //任务栏区显示图标 
49                 this.ShowInTaskbar = true;
50                 //托盘区图标隐藏 
51                 notifyIcon.Visible = false;
52             }
53         }
54 
55         private void exitToolStripMenuItem_Click(object sender, EventArgs e)
56         {
57             Application.Exit();
58         }
59 
60         private void showMainWindowToolStripMenuItem_Click(object sender, EventArgs e)
61         {
62             showMainWindow();
63         }
64 
65         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
66         {
67             // 取消关闭窗体
68             e.Cancel = true;
69 
70             // 将窗体变为最小化
71             this.WindowState = FormWindowState.Minimized;
72         }
73     }
74 }

 

 

 

原文:http://www.cnblogs.com/wuxiangbing/articles/1885483.html

 

posted @ 2015-09-15 10:11  yasepix  阅读(423)  评论(0编辑  收藏  举报