浅谈c#实现隐藏任务栏图标的Windows托盘程序
2008-09-04 09:30
513 查看
在网上看了许多人问怎么样实现在WINDOWS托盘程序中,当点击最小化时将窗体隐藏在任务栏中,而点击托盘栏中的程序托盘时又会显示出窗体的正常状态的功能。许多人的思路是找到最小化时触发的事件或者是程序最小化时执行的方法,可是怎么也找不到。其实实现这种功能很简单,只不过许多人的思路一直停留在找到最小化的方法体上了,以为只要在此方法体中再加上一些语句就可以实现,可是怎么也找不到,于是就卡在这里了。其实实现这种功能很简单,可以通过以下方法实现:
1.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。
2.添加窗体最小化事件(在这里实现隐藏任务栏图标,有两种方法):
方法一:
// this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState==FormWindowState.Minimized)
{
this.Hide();或者是this.Visible = false;
this.notifyIcon1.Visible=true;
}
}
方法二:
this.Resize += new System.EventHandler(this.Form1_Resize);
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
}
3.添加点击图标事件(实现点击左键显示主窗体正常状态):
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
4.可以给notifyIcon添加右键菜单:
主窗体中拖入一个ContextMenu控件contextMenu1,点中控件,在上下文菜单中添加菜单,notifyIcon1的ContextMenu行为中选中contextMenu1作为上下文菜单。(可以在子菜单中添加行为)……
在这里主要谈谈在第二步中的两种方法。
这里使用的是两种最常规,也是最常用的办法。第一种的SizeChanged()事件,其本意是当控件上的Size属性更改时引发的事件。而第二种方法Resize()事件,是在调整控件大小时引发的事件。可在这里为什么都可以实现同样的功能?可以做一下实验看看两个事件到底是什么时候发生的。
private void Form1_SizeChanged(object sender, EventArgs e)
{
MessageBox.Show("sizechange即将发生");
if (this.WindowState == FormWindowState.Minimized)
this.Visible = true;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
MessageBox.Show("resize发生了");
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
将这些代码都加在同一个程序中,编译执行可以看到。当我们手工的扩大或缩小我们的窗体大小时,会弹出消息框"resize发生了",接着就会弹出消息框"sizechange即将发生"。从这个小例子可以看出这两个事件其实是大同小异的,只不过Resize先执行而SizeChanged后执行罢了。从这两个事件的MSDN解释上我们也不难看出,当我们改变控件大小,这时候必先触发Resize()(在调整控件大小时引发的事件),而我们改变了大小也必然会导致Size属性的改变,这时又会触发SizeChanged事件。这个先后道理我想不难理解。所以说这两个事件是乎有着某种必然的联系!
最小化(最大化)其实和我们手工改变窗体的大小是一个道理。而之所以能用两种方法得到相同的效果的道理也正是如以上所述,当然就可以达到异曲同工之妙!
1.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。
2.添加窗体最小化事件(在这里实现隐藏任务栏图标,有两种方法):
方法一:
// this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState==FormWindowState.Minimized)
{
this.Hide();或者是this.Visible = false;
this.notifyIcon1.Visible=true;
}
}
方法二:
this.Resize += new System.EventHandler(this.Form1_Resize);
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
}
3.添加点击图标事件(实现点击左键显示主窗体正常状态):
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
4.可以给notifyIcon添加右键菜单:
主窗体中拖入一个ContextMenu控件contextMenu1,点中控件,在上下文菜单中添加菜单,notifyIcon1的ContextMenu行为中选中contextMenu1作为上下文菜单。(可以在子菜单中添加行为)……
在这里主要谈谈在第二步中的两种方法。
这里使用的是两种最常规,也是最常用的办法。第一种的SizeChanged()事件,其本意是当控件上的Size属性更改时引发的事件。而第二种方法Resize()事件,是在调整控件大小时引发的事件。可在这里为什么都可以实现同样的功能?可以做一下实验看看两个事件到底是什么时候发生的。
private void Form1_SizeChanged(object sender, EventArgs e)
{
MessageBox.Show("sizechange即将发生");
if (this.WindowState == FormWindowState.Minimized)
this.Visible = true;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
MessageBox.Show("resize发生了");
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
将这些代码都加在同一个程序中,编译执行可以看到。当我们手工的扩大或缩小我们的窗体大小时,会弹出消息框"resize发生了",接着就会弹出消息框"sizechange即将发生"。从这个小例子可以看出这两个事件其实是大同小异的,只不过Resize先执行而SizeChanged后执行罢了。从这两个事件的MSDN解释上我们也不难看出,当我们改变控件大小,这时候必先触发Resize()(在调整控件大小时引发的事件),而我们改变了大小也必然会导致Size属性的改变,这时又会触发SizeChanged事件。这个先后道理我想不难理解。所以说这两个事件是乎有着某种必然的联系!
最小化(最大化)其实和我们手工改变窗体的大小是一个道理。而之所以能用两种方法得到相同的效果的道理也正是如以上所述,当然就可以达到异曲同工之妙!
相关文章推荐
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- C#实现系统托盘,C#窗体最小化时隐藏为任务栏图标
- 解决Java程序的托盘图标在Windows任务栏重建后丢失的问题(使用SystemTray类创建托盘图标)
- Windows系统托盘图标程序之Java实现
- C#实现系统托盘,C#窗体最小化时隐藏为任务栏图标的Window appllication
- VC++中实现程序启动后隐藏窗口,最小化到托盘图标。
- windows/mfc实现窗口隐藏同时 在任务栏上无图标显示功能
- BCB如何隐藏任务栏上对应的程序图标按钮,不是托盘上的
- C#实现系统托盘,C#窗体最小化时隐藏为任务栏图标
- MFC 为程序制作一个系统托盘图标、显示隐藏任务栏图标
- Windows系统托盘图标程序之Java实现
- QT 实现一个任务栏托盘图标程序 weathertrayicon
- MFC程序任务栏托盘图标的实现
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- C#实现系统托盘,C#窗体最小化时隐藏为任务栏图标
- 解决Java程序的托盘图标在Windows任务栏重建后丢失的问题(使用SystemTray类创建托盘图标)
- VC++中实现程序启动后隐藏窗口,最小化到托盘图标。
- QT:修改Windows下程序任务栏图标
- 强!简洁!SWT实现任务栏图标(系统托盘),带菜单和ToolTip