C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性

简介: NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示气球状提示框(Win10只有为本地Toast通知),ToolTip\oolTipText可以...

[toc]

气球状提示框的介绍和系统通知变化

NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示任务栏中一定时间的具有指定标题、消息内容和图标的气球状提示框(气泡提示框)。

也可以通过NotifyIcon属性BalloonTipIconBalloonTipTextBalloonTipText指定相关内容。

单独介绍它的变化,是因为在Win7及之前的系统中,该方法显示提示为气球状的提示框,基本效果如下:

但是在Win10,气球状的提示框已经该系统本地的toast通知效果取代,也就是,使用NotifyIcon的ShowBalloonTip方法,将会显示系统本地通知,具体效果如下:

并且notifyIcon.ShowBalloonTip(timeout)第一个参数timeout,从Windows Vista开始,此参数已经无效,通知的显示时间基于系统的辅助功能设置,所以一般设置为0即可。

消息通知的提示

新建项目NotificationTrayToolTip,添加两个按钮,一个显示,一个关闭,以及一个名为notifyIcon的NotifyIcon控件(初始可见性设置为false:notifyIcon.Visible = false;)。

设计器中为notifyIcon的Icon属性指定一个图标文件。

ShowBalloonTip()方法及指定消息类型

显示气泡提示按钮的点击事件中,设置notifyIcon可见,并执行ShowBalloonTip()方法,其第二个参数为标题,第三个参数为消息内容,最后一个为消息类型。

private void buttonPro1_Click(object sender, EventArgs e)
{
    notifyIcon.Visible = true;
    // timoeout参数已经无效,通知的显示时间基于系统的辅助功能设置
    notifyIcon.ShowBalloonTip(0, "消息标题-Error", "这是一个错误类型的消息内容", ToolTipIcon.Error);
}

系统toast通知显示内容对应notifyIcon控件的属性或参数:

关闭消息提示按钮的点击事件代码中,设置Visible = false关闭系统提示:

private void buttonPro2_Click(object sender, EventArgs e)
{
    notifyIcon.Visible = false;
    //notifyIcon.Visible = true;
}

notifyIcon.Visible = false会清空所有相关的系统操作中心里面的消息通知。

NotifyIcon属性设置消息

通过属性也可以指定消息内容、标题、类型等:

notifyIcon.BalloonTipIcon = ToolTipIcon.Warning;
notifyIcon.BalloonTipText = "测试";
notifyIcon.BalloonTipTitle = "标题";
notifyIcon.ShowBalloonTip(0);

BalloonTipIcon不同的消息类型

ToolTipIcon消息类型图标的取值有四种,和方法中的对应:

  • ToolTipIcon.Info
  • ToolTipIcon.Warning
  • ToolTipIcon.Error
  • ToolTipIcon.None

ToolTipText属性

Winform中许多控件都提供有ToolTipText属性,用于设置提示消息,用于在鼠标位于控件上方(悬停)时,显示提示语。

通常都是容器控件的子控件项有这个属性,用于提示不同的子项信息。

一般在设置子项控件的ToolTipText后,要想使提示生效,还需要设置父容器控件的ShowItemToolTips为true(DataGridViewShowCellToolTips属性)。

如下,ToolStrip、MenuStrip1、ListView、DataGridView、TabControl等几种控件启用tip提示,并为子项设置不同的提示信息。

//必须设置ShowToolTips为true,当鼠标位于tab时显示提示
tabControl1.ShowToolTips = true;
tabPage1.ToolTipText = "你好,我是tab提示";


dataGridView1.ShowCellToolTips = true;
dataGridView1[0, 0].ToolTipText = "单元格的tip";


toolStrip1.ShowItemToolTips = true;
toolStripLabel1.AutoToolTip = true;
toolStripLabel1.ToolTipText = "toolStrip1子项的提示";

menuStrip1.ShowItemToolTips = true;
menuStrip按钮ToolStripMenuItem.AutoToolTip = true;
menuStrip按钮ToolStripMenuItem.ToolTipText = "menuStrip1子项的提示";

listView1.ShowItemToolTips = true;
listView1.Items[0].ToolTipText = "我是listViewItem的提示";

接本效果如下:

但默认提供的提示文本的显示,并不及时,并且,如果窗体不是焦点窗体,这些提示也都是无效的(而有的子项,如果是激活状态,tip也会无效)

ToolTip提示控件显式或主动的提示消息

通过ToolTip控件可以设置在哪个控件上显示什么提示信息,以及通过事件触发的方式(比如hover、鼠标进入、键盘按键),显式的或多种条件下,展示提示框。

一个ToolTip同时为多个控件设置提示

ToolTip.SetToolTip(Control control, String caption)方法为指定control控件设置caption提示消息。

并且,一个ToolTip可以应用多个控件。

toolTip.SetToolTip(button1, "我是按钮1提示");
toolTip.SetToolTip(radioButton1, "单选提示,必需选择");
toolTip.SetToolTip(buttonPro1, "使用ToolTip的提示");

显式设置ToolTip

根据需要在事件中显式的进行提示:

button1.MouseEnter += Button1_MouseEnter;

//...

private void Button1_MouseEnter(object sender, EventArgs e)
{
    toolTip.SetToolTip(button1, "鼠标进入提示");
}
注: 消息提示默认是跟随鼠标的,如果鼠标未在控件位置上方,提示也不会显示出来。可以通过调用Show()主动实现显示。

ToolTip.Show()调用显示提示框(可不自动关闭)

如果调用Show不能很好的显示或隐藏,可以先调用Hide方法,在调用Show。

比如,在键盘事件方法中,通过调用Show()方法,可以主动显示提示框,而不需要鼠标悬停。

下面调用Show,不指定持续时间将会一直显示

button1.KeyUp += Button1_KeyDown;

// ...

private void Button1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode== Keys.Enter)
    {
        //toolTip.Hide(button1);
        toolTip.Show("密码不能为空,邮箱格式不正确等", button1); // 一直显示
    }
}
  • 指定显示2秒
toolTip.Show("密码不能为空,只显示5秒", button1, 5000); // 显示5000毫秒
  • 指定显示位置

在button1的上方显示:

toolTip.Show("密码不能为空,在上方显示", button1, 0, -button1.Height, 5000);

ToolTip设置消息显示的延迟和保留(停留)时间

  • ToolTip.AutomaticDelay 设置消息提示的初始显示延迟(InitialDelay)、重新显示延迟(ReshowDelay)、停留延迟(AutoPopDelay)等。可以设置较短,时提示框立马显示。单位毫秒,默认500。
  • ToolTip.AutoPopDelay 消息弹出的自动延迟,即消息提示框的显示时间,可以设置较大值,用于显示停留的时间更长。单位毫秒,默认5000。

此外还可以根据需要单独设置InitialDelayReshowDelay等属性。

ToolTip.ToolTipIcon消息类型的图标和ToolTipTitle标题

如果设置ToolTipIcon图标,最好同时设置ToolTipTitle标题,因为设置图标会多出一行标头,没有标题效果很不好看。

Error图标提示框的效果:

toolTip.ToolTipIcon = ToolTipIcon.Error;
toolTip.ToolTipTitle = "错误提示!";

  • Error 错误图标
  • Info 信息图标。
  • Warning 警告图标。
  • None 无图标。

ToolTip.ShowAlways = true窗体或父控件不激活时也显示提示框

默认,如果窗体不激活(不是当前操作窗体),或者提示框对应的控件的父控件为非激活状态,鼠标位于控件上方时,并不会显示提示框。

通过设置ShowAlways = true可以使提示框始终显示。

toolTip.ShowAlways = true;

ToolTip.IsBalloon=true气泡样式提示

toolTip.IsBalloon=true;

设置提示框的大小Size(Width、Height)

对于一段很多内容的消息提示,ToolTip默认显示在一行,这就导致消息框非常长,看起来非常不好

toolTip.SetToolTip(label1, "我是一段内容非常长的提示框信息,主要是测试消息提示框的大小修改或者宽度需改的情况,可以做到根据消息多少很好的显示消息框");

那么,如何设置消息提示框的大小呢?ToolTip没有提供设置消息提示框大小的属性,唯一可设置的是Popup事件的参数PopupEventArgs上进行Size大小的设置。

非气泡提示框设置大小

仅Label1的提示框(提示文字多的提示框)修改显示的大小。

toolTip.Popup += ToolTip_Popup;

// ...
private void ToolTip_Popup(object sender, PopupEventArgs e)
{
    if (e.AssociatedControl == label1)
    {
        e.ToolTipSize = new Size(170, 90);
    }
}

效果明显比较好了:

气泡提示框的大小处理

如果消息提示框为气泡样式,则设置Size将无效(仅Width宽度有效),无法显示为设置的大小。比较好的方法是,根据设置的Width宽度,在提示消息合适的地方进行换行,以正确的显示高度。

提示内容适当换行:

toolTip.SetToolTip(label1, "我是一段内容非常长的提示框信息,\r\n主要是测试消息提示框的大小修改或者\r\n宽度需改的情况,可以做到根据消息\r\n多少很好的显示消息框");
toolTip.Popup += ToolTip_Popup;

// ....

private void ToolTip_Popup(object sender, PopupEventArgs e)
{
    if (e.AssociatedControl==label1)
    {
        e.ToolTipSize = new Size(230, 90);
    }
}

气泡提示框大小不同的效果。

相关文章
|
7月前
|
SQL 数据库 数据安全/隐私保护
C#wpf学习卡后台管理系统
C#wpf学习卡后台管理系统
173 32
|
6月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
175 3
|
7月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
270 0
|
11月前
|
Linux C# iOS开发
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
281 12
|
11月前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
164 19
|
3月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
495 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
241 3
|
11月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
797 12
|
12月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
465 4