• NotifyIcon控件的使用


    一、NotifyIcon控件右键菜单的设置

    二、NotifyIcon控件闪烁效果实现 

    Windows通知栏可以显示应用程序的图标以当应用程序窗口隐藏时,可以通过右键菜单、单击、双击等方式显示应用程序窗口或执行一些应用程序的任务。这些应用程序通常是在后台运行的一些进程,比如杀毒、监控。 

    1、创建NotifyIcon控件

    从工具箱拖出一个NotifyIcon控件。属性设置:

    NotifyIcon控件Text属性与应用程序的标题(主Form的Text属性)相同。

    NotifyIcon控件Icon属性与应用程序的Icon属性相同。

    此时启动应用程序时,会在通知栏显示一个与应用程序图标一样的图标,该图标属于应用程序。也称应用程序的托盘图标。 

    2、最小化窗体时隐藏窗体,通过托盘显示窗体

    响应主窗体的SizeChanged事件,将窗口完全隐藏起来(不在桌面和任务栏显示),并显示通知栏托盘图标和气泡,表示后续可通过托盘图标来控制应用程序。

    private void Form1_SizeChanged(object sender, EventArgs e)
    {
    
        if (WindowState == FormWindowState.Minimized)
        {
    
            this.Hide();   
    
            this.notifyIcon1.Visible = true;
    
            //弹气泡/通知框提示
    
            this.notifyIcon1.ShowBalloonTip(20, "attention", "this is a demo", ToolTipIcon.Info);
        }
    }

    响应NotifyIcon控件的MouseDoubleClick双击事件显示应用程序主窗口:

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)
        {    
            this.Show();
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
        }
    }

    3、NotifyIcon控件右键菜单

    拖出一个ContextMenuStrip控件,并定义两个菜单项,一个为打开主界面一个为退出。设置NotifyIcon控件ContextmenuStrip属性为此ContextMenuStrip控件。这样在托盘图标上右击可以弹出此菜单执行程序的各种功能。
    打开主界面的菜单:

    private void OpenMainFormMenuitem_Click(object sender, EventArgs e)
    {
        if (this.Visible){
            this.Hide();
        }
    
        else{
            this.Show();
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
        }
    }

    退出程序主界面菜单:

    private void ExitMainFormMenuitem_Click(object sender, EventArgs e){
    
        this.Close();
    
    }

    4、托盘闪烁效果
    当应用程序接收到消息,托盘图标以闪烁效果通知用户。网上有人是通过定时器将该图标隐藏与显示的交替来实现。但效果不好,当图标隐藏时它的位置就被其它图标占用,使得整个通知栏所有图标位置不停的变动。因此考虑使用一个透明的图标与托盘图标来交替出现以实现闪烁效果。

    透明图标的制作:

    VS中打开Form的资源文件(*.resx),添加资源-添加新图标,对此图标各个规格进行编辑-框选像素后删除,只留绿色背景即表示它是一个透明的图标。 

    拖出一个Timer控件,设置其Interval为300毫秒,响应Tick事件为:

    private void timer1_Tick(object sender, EventArgs e)
    
    {
    
        if(this.bTransparent){
    
          this.bTransparent = false;
    
           //显示透明图标
    
          this.notifyIcon1.Icon = ((System.Drawing.Icon)(resourcesForm.GetObject("IconNotifyTransp"))); 
    
        }
    
        else{
    
          this.bTransparent = true;
    
          //显示托盘图标
    
          this.notifyIcon1.Icon = ((System.Drawing.Icon)(resourcesForm.GetObject("IconNotifyMain")));  
    
        }
    
    }
  • 相关阅读:
    记一次与用户的亲密接触
    拨开障目的叶,一览CMDB庐山真面目
    广通软件获“2016年度中国最具影响力IT运维管理软件提供商”殊荣
    CMDB三大绝招,助我站稳运维之巅
    datetime module总结
    Python time module总结
    IPMItool小结
    Python selenium 延时的几种方法
    Python 字典操作
    YUM 配置
  • 原文地址:https://www.cnblogs.com/superfeeling/p/12950883.html
Copyright © 2020-2023  润新知