[toc]
气球状提示框的介绍和系统通知变化
NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip
方法用于显示任务栏中一定时间的具有指定标题、消息内容和图标的气球状提示框(气泡提示框)。
也可以通过NotifyIcon属性BalloonTipIcon
、BalloonTipText
、BalloonTipText
指定相关内容。
单独介绍它的变化,是因为在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(DataGridView
为ShowCellToolTips
属性)。
如下,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。
此外还可以根据需要单独设置InitialDelay
、ReshowDelay
等属性。
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);
}
}
气泡提示框大小不同的效果。