浅谈c#实现隐藏任务栏图标的Windows托盘程序

     在网上看了许多人问怎么样实现在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事件。这个先后道理我想不难理解。所以说这两个事件是乎有着某种必然的联系!
     最小化(最大化)其实和我们手工改变窗体的大小是一个道理。而之所以能用两种方法得到相同的效果的道理也正是如以上所述,当然就可以达到异曲同工之妙!

转载于:https://www.cnblogs.com/sxyx2008/archive/2008/08/25/1276152.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现Windows窗体程序系统托盘功能的C#代码示例,可以实现点击窗体程序的最小化时系统任务栏将不显示程序图标,仅仅系统托盘方式驻留: 1. 在窗体中添加一个NotifyIcon控件,并设置其Icon属性为窗体的图标,Visible属性为false。 2. 在窗体的Resize事件中添加如下代码: ```csharp private void Form1_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { this.Hide(); notifyIcon1.Visible = true; } } ``` 该代码会在窗体最小化时隐藏窗体,并将NotifyIcon控件设置为可见。 3. 在NotifyIcon控件的MouseDoubleClick事件中添加如下代码: ```csharp private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; notifyIcon1.Visible = false; } ``` 该代码会在用户双击NotifyIcon控件时显示窗体,并将NotifyIcon控件设置为不可见。 4. 在窗体的Closing事件中添加如下代码: ```csharp private void Form1_FormClosing(object sender, FormClosingEventArgs e) { notifyIcon1.Visible = false; } ``` 该代码会在窗体关闭时将NotifyIcon控件设置为不可见。 5. 在窗体的Load事件中添加如下代码: ```csharp private void Form1_Load(object sender, EventArgs e) { this.ShowInTaskbar = false; } ``` 该代码会在窗体加载时将窗体从任务栏中移除。 以上就是实现Windows窗体程序系统托盘功能的C#代码示例,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值