桌面程序的开发中,经常考虑能在状态栏实现托盘快捷操作,托盘程序的实现在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