C# WinForm中NotifyICon控件的用法【1】

article/2025/11/6 1:15:56

任务栏中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。

平时我们在使用QQ的时候,QQ主界面隐藏到系统托盘里,需要调用的时候在点击出来,很好很强大。

那么我们在C#中如何实现呢。本节将来一起探讨一下。其实就是NotifyICon控件的作用。那么您也会问那么,我在系统托盘中右键单击该Icon,会弹出菜单又是怎么实现的呢?

其实这个是contextMenuStrip控件的作用。那么当好友传来信息,托盘中好友头像Icon不断闪烁便是,该图片隐藏与显示的交叉实现了。使用Time控件控制显示的时间。这的确是个有趣的技巧。

      NotifyIcon控件提供了编写此功能的方法。Icon属性定义显示在通知区域中的图标。图标的弹出菜单由 ContextMenu属性确定。Text属性分配工具提示文本。要在通知区域中显示图标,必须将 Visible属性设置为 true。

 

【一】我们先来分析一下NotifyICon控件基本属性和方法,如图:

BalloonTipIcon —— 气泡提示的类型,有None(无)、Info(蓝色感叹号)、Warnning(黄色感叹号)、Error(小红叉);

BalloonTipText —— 气泡提示的内容,如上图的None等气泡类型信息;

BalloonTipTitle —— 气泡提示的标题,如上图的Tip;

ContextMenuStrip —— 绑定的右键菜单;

Icon —— 所显示的图标;

Text —— 鼠标移上去时,显示的提示信息;

Visible —— 是否显示图标,当然,不显示就看不到了。

操作步骤:

   第一步:新创建一个项目Form1,text属性修改为自己的项目名称;

   第二步:向Form1窗口中添加一个NotifyIcon控件,修改其Name属性为 MyNotifyIcon。修改其Text属性与应用程序的标题相同。这是因为NotifyIcon显示在系统托盘中时,Text属性中保存的文本为鼠标移动到程序图标上时的提示信息。修改Icon属性,为NotifyIcon添加一个图标;

   第三步:在Form1的属性窗口上,把Icon属性也选择为与NotifyIcon相同的图标。修改ShowInTaskBar属性值为False,这样,应用程序在运行时就不会出现在任务栏中;

第四步:

添加双击NotifyIcon时的事件处理代码(DoubleClick)

   private void MynotifyIcon_DoubleClick(object sender, System.EventArgs e)

   {

         if(this.Visible)

         {

             this.Hide();

         }

       else

       {

            this.Show();

        }

   }

第五步:

在使用NotifyIcon控件时,经常需要用到快捷菜单(ContextMenu控件)。使用方法为,向Form1中添加contextmenu控件,添加两个菜单项,一个为打开主界面,一个为退出。在NotifyIcon的ContextMenu属性中选择刚刚添加的ContextMenu控件。这样在图标上可以通过快捷菜单执行程序的各种功能。

第六步:

打开主界面的菜单编码为:

 private void 打开主界面ToolStripMenuItem_Click(object sender, EventArgs e)

{

        if (this.Visible)

         {

                this.Hide();

         }

         else

          {

               this.Show();

          }

}

第七步:

private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

   {

        this.Close();

   }

   Form1_SizeChanged事件,效果为最小化窗体时,在系统托盘区域显示程序图标及气球提示:

    private void Form1_SizeChanged(object sender, EventArgs e)

        {

            if (WindowState == FormWindowState.Minimized)

            {

                this.Hide();

                this.notifyIcon1.Visible = true;

                this.notifyIcon1.ShowBalloonTip(30, "注意", "大家好,这是一个事例", ToolTipIcon.Info);

            }

        }

 

这样就实现了上述功能,需要强调的是:this.notifyIcon1.ShowBalloonTip(30, "注意", "大家好,这是一个事例", ToolTipIcon.Info);

    为气球提示的实现,代码WindowState == FormWindowState.Minimized为窗体最小化的判断条件,代码this.WindowState = FormWindowState.Normal;为窗体还原的实现

 

【二】转载网上的一个实例

【转】C#编写NotifyIcon 将窗口最小化到托盘

1.设置窗体属性showinTask=false

2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。

3.添加窗体最小化事件(首先需要添加事件引用):

   // 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.notifyIcon1.Visible=true;
  }

 }
4.添加点击图标事件(首先需要添加事件引用):

 private void notifyIcon1_Click(object sender, EventArgs e)
 {
    this.Visible = true;

    this.WindowState = FormWindowState.Normal;

    this.notifyIcon1.Visible = false;
 }

5.可以给notifyIcon添加右键菜单:

主窗体中拖入一个ContextMenu控件contextMenu1,点中控件,在上下文菜单中添加菜单,notifyIcon1的ContextMenu行为中选中contextMenu1作为上下文菜单。

(可以在子菜单中添加行为)

--------------------------------------------------------------------------------------------------------------------------------------------------

【三】实例实践:在文本框中输入文字,在系统托盘中显示提示气泡信息

效果为:

*****

具体代码分析如下:

public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void btnShow_Click(object sender, EventArgs e)
        {
            string tipText = this.txtText.Text.Trim() == "" ? "No text!":this.txtText.Text.Trim();
            this.notifyIcon.ShowBalloonTip(1000, "Tip", tipText, ToolTipIcon.Info);

           //显示时间,标题Tip,显示文本,显示标号
        }

        private void notifyIcon_MouseMove(object sender, MouseEventArgs e)
        {
            // 获得屏幕的宽
            Screen screen = Screen.PrimaryScreen;
            int screenWidth = screen.Bounds.Width;

            // 获得工作区域的高
            int workAreaHeight = Screen.PrimaryScreen.WorkingArea.Height;

            // 获得提示窗体的宽和高
            int toolTipWidth = Tools.GetInstance().Width;
            int toolTipHeight = Tools.GetInstance().Height;

            // 那么提示窗体的左上角坐标就是:屏幕的宽 - 提示窗体的宽, 工作区域的高 - 提示窗体的高
            Tools.GetInstance().Location = new Point(screenWidth - toolTipWidth, workAreaHeight - toolTipHeight);
            // 显示提示窗体
            Tools.GetInstance().Show();
            // 开启Timer
            this.timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // 关闭Timer
            this.timer1.Enabled = false;
            // 隐藏提示窗体
            Tools.GetInstance().Hide();
        }
    }

下面就这个栗子在添加一个仿QQ提示框

这个窗口的代码是:

private static Tools Instance = null;

        public static Tools GetInstance()
        {
            if (Instance == null)
                Instance = new Tools();

            return Instance;
        }

最终效果是:

不好意思,楼主正在听歌。显示歌词了,没关系,看懂就可以了。

 

 

 

转自hzman的博客

原文地址:cnblogs.com/webman/archive/2007/06/22/792849.html

 

 

 

 


http://chatgpt.dhexx.cn/article/uVN12lFs.shtml

相关文章

notify() notifyAll() 区别

notify 参考:https://blog.csdn.net/weixin_44121696/article/details/109306019 public class ObjectTest {public static void main(String[] args) {Object objectLock new Object();new Thread(() -> {synchronized (objectLock) {System.out.println(Thre…

NotifyIcon的属性、事件、方法

参考文章: NotifyIcon控件的使用. 属性 属性名操作博主翻译ContextMenuStrip可绑定ContextMenuStrip控件当用户右击该图标,显示的快捷菜单Icon必须选择一个ico格式的图片,否则右下角任务栏不会出现对象的可见性级别。所有属性都适用 事件 1.鼠标双击…

notify和notifyAll

notify: notify只会唤醒众多等待线程中的其中一个线程 用包子铺案例来演示一下 package com.thread;/*** author 邓亚非*/ public class TestNotify {private static Object objectnew Object();public static void main(String[] args) {// 顾客1线程new Thread(new …

notify和notifyall的区别

文章目录 场景分析例子经典java线程状态流转图 场景 调用wait的线程的唤醒,一般通过notify和notifyAll,但是两者之间有什么区别呢? 分析 线程调用synchronized方法或者synchronized代码块需要获取对象锁,如果没有获取则进入锁池线程调用wa…

Winform从入门到精通(14)——NotifyIcon(史上最全)

文章目录 前言:一、属性1、BalloonTipIcon1.1 ToolTipIcon.Error1.2 ToolTipIcon.Info1.3 ToolTipIcon.Warning1.4 ToolTipIcon.None2、BalloonTipText3、BalloonTipTitle4、Icon4.1 界面设置icon属性4.2 代码设置Icon属性5、Tag6、Text7、Visible

WPF利用NotifyIcon创建任务栏图标(菜鸟教程)

学习目标: 记录从WPF应用创建开始,一步步到任务栏图标创建的全过程。 流程: 1、环境:Win10 VS2017 打开VS2017,选择文件 -> 新建 -> 项目 -> Visual C# -> Windows桌面 ->WPF应用 -> 更改项目名为…

Notify

1 有什么用 作用 : 解耦,异步,并行 举个栗子 假设我们有这么一个应用场景,为了完成一个用户注册淘宝的操作,可能需要将用户信息写入到用户库中,然后通知给红包中心给用户发新手红包,然后还需…

NotifyICon使用

2010-04-11 15:47 by Ju2ender, 1438 visits, 网摘, 收藏, 编辑 最常见使用NotifyIcon的程序就是QQ了,当初我很好奇这通知区域的小企鹅是如何随着QQ的运行放上去的,这的确是个有趣的技巧。 要是用到自己的程序上的确显得很专业!我们来为自己的…

notifyIcon 用法

BalloonTipIcon —— 气泡提示的类型,有None(无)、Info(蓝色感叹号)、Warnning(黄色感叹号)、Error(小红叉) BalloonTipText —— 气泡提示的内容,如上图的N…

C#如何使用NotifyIcon实现任务栏托盘菜单及气泡提示

以软件【银行业会计人员技能训练系统】为例,如何使用NotifyIcon实现任务栏托盘菜单及气泡提示? 实现系统托盘方法如下: 1、向窗体中添加NotifyIcon控件和ContextMenuStrip控件; 2、为ContextMenuStrip控件添加子项; 3…

C#——NotifyICON的使用

1、作用(给程序增加下方提示图标) 2、实现方式 1)添加NotifyIcon控件,属性中Visible设为true 2)选择要显示的图标(icon格式),此时已经可以显示小图标,但右击不会显示小菜单栏. 3、添加ContextMenuStrip控…

【学习笔记】C# 动态系统托盘图标的实现 - NotifyIcon控件

操作步骤: 1、创建一个C# Windows窗体应用项目,命名为“IconTwinkle”: 2、双击解决方案中的“Resources.resx”,点击“添加资源”,选择图标并导入: 3、可见选定的图标已导入项目中: 4、双击右…

Android开发之PreferenceActivity和PreferenceFragment

在PreferenceActivity中,给我们提供了四个选项集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。 注意: 通过PreferenceActivity生成的XML文件,命名方式是定死了的&…

设置PreferenceFragment主题

整个项目主题颜色暗色,在使用PreferenceFragmentCompat文字也是黑色的导致看不清楚,采取更改PreferenceFragmentCompat主题实现,效果如下: 查看PreferenceFragmentCompat源码看到onCreate开始设置Theme,先获取preferen…

PreferenceFragment和PreferenceActivity

提要:PreferenceFragment展示中设置的值可以通过PreferenceManager.getDefaultSharedPreferences(context).来实现 【正文】 一、PreferenceFragment的引入: PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置…

彻底变换PreferenceFragment样式和全局设置字体样式的解决方案

一、PreferenceFragment样式修改 新样式 直接上图,原样式为白色样式,即为PreferenceFragment的默认样式: ① 白底黑字;② SwitchPreference开关默认为蓝色; ③ ListPreference列表默认为白色,选中状…

Android之PreferenceFragment详解

【正文】 一、PreferenceFragment的引入: PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Pr…

PreferenceActivity和PreferenceFragment实现设置界面

在进行Android开发的过程中,有时需要实现一个设置界面,就像下面的系统的显示设置。这样的界面自己实现起来略显繁琐,好在Android中已经实现了这样的设置界面,那就是PreferenceActivity。并且PreferenceActivity还有一个莫大的好处…

PreferenceFragment设置界面的编写

效果图&#xff1a; 布局文件&#xff1a; <PreferenceScreenxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"><PreferenceCategoryandroid:title"string/basic_setting…

Android PreferenceFragment

PreferenceFragment用来显示首选项的设置&#xff0c;效果图如下&#xff1a; 主布局文件&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_widt…