『7x24小时有问必答』
在实际应用开发中,有时候为了美观或者节约UI空间,经常见到有些控件只有图标,没有文字说明,当用户鼠标放在图标控件上时,才显示相应的文本提示(Tips),或者当需要时才显示的一种控件,今天以一些简单的小例子,简述在基于.NET的Windows窗体编程之WinForms中提示控件的常见用法,仅供学习分享使用,如有不足之处,还请指正。

概述

在WinForms开发框架中,常见的提示控件主要有以下几种:
ToolTip,用于在用户鼠标指向控件时显示文本,它可以与任何控件相关联。NotifyIcon,在任务栏的状态通知区域中显示后台运行并且没有用户界面的进程图标。ErrorProvider,用于以非干扰性的方式向用户显示错误,通常与验证窗体上的用户输入或显示数据集中的错误结合使用。

ToolTip

ToolTip用于在用户鼠标指向控件时显示文本,它可以与任何控件相关联,且可以同时为多个控件进行工具提示。ToolTip关键属性如下所示:
AutoPopDelay,确定当鼠标在工具提示区域保持静止时,工具提示窗口保持可见的时间长度。InitialDelay 属性确定用户必须指向关联控件多长时间才能显示 ToolTip 字符串。  ReshowDelay 属性设置当鼠标从一个 ToolTip 关联控件移动到另一个关联控件时,随后 ToolTip 字符串出现所需的时间(毫秒)。AutomaticDelay,它是一个综合属性,可以自动的将上述三个属性值合理分配时间。例如,当 AutomaticDelay 设置为值 N 时,InitialDelay 设置为 N,ReshowDelay 设置为 AutomaticDelay 除以 5(或 N/5)的值,AutoPopDelay 设置为 AutomaticDelay 属性(或 5N)的值五倍的值。IsBalloon,指定ToolTip是否以气球的形式出现,默认为false。ShowAlways,是否一直显示工具提示,即使控件不处于激活状态时,默认为false。ToolTipIcon,工具提示的图标,它有四个选项:None,Info,Warning,Error。ToolTipTitle,用于设置获/取工具提示的标题。UseAnimation,提示框显示或隐藏时是否使用动画。
UseFading,提示框显示或隐藏时是否使用淡入淡出的效果。

首先拖动ToolTip控件到Form表单中,由于ToolTip组件默认不显示在页面中,默认不会在Form表单上显示,而是显示在组件托盘中,如下所示:

在选中Form表单的其他控件时,在控件的属性对话框中,就是多出一个属性“ToolTip on toolTip1”,在属性框中输入提示的文本,如下所示:

运行示例,效果如下所示:

也可以在后台代码中设置控件的ToolTip,如在Form的Load事件中,设置按钮的工具提示,如下所示:
private  void  FrmTips_Load(object  sender, EventArgs e){       this.toolTip1.SetToolTip(this.btnOpen,  "Please click it to open the file dialog.");}

运行实例,效果如下所示:

NotifyIcon

NotifyIcon组件在任务栏的状态通知区域中显示后台运行并且没有用户界面的进程图标,并且大部分时间都不会显示用户界面。 例如,可以通过单击任务栏的状态通知区域中的图标来访问病毒防护程序。每个 NotifyIcon 组件在状态区域中显示一个图标。 如果你有三个后台进程并且希望为每个进程显示一个图标,则必须向窗体添加三个 NotifyIcon 组件。  
NotifyIcon 组件的关键属性,主要有以下几个:
Icon 属性设置显示在状态区域中的图标。  Visible 表示控件是否显示,若要显示图标,必须将Visible设置为true。
BalloonTipText,表示气球状提示关联的文本
BalloonTipIcon,表示气球状提示关联的图标  
BalloonTipTitle,表示气球状提示关联的标题

NotifyIcon的关键事件:
DoubleClick 事件处理程序中编写代码,以便在用户双击图标时发生某种情况。  
  
首先拖动NotifyIcon控件到Form表单中,然后设置NotifyIcon的相关属性(如Icon,Visible)等,如下所示:
在Form的大小变化时,当Form最小化时,调用NotifyIcon的ShowBallonTip方法,显示提示,如下所示:
private  void  FrmTips_SizeChanged(object  sender, EventArgs e){       if  (WindowState == FormWindowState.Minimized)      {             this.notifyIcon1.ShowBalloonTip(30000,  "Tips",  "这是一个提示", ToolTipIcon.Info);      }}

为NotifyIcon注册Click事件,当点击时触发响应,如下所示:
Click事件的内容如下所示:
private  void  notifyIcon1_Click(object  sender,  EventArgs  e){       this.WindowState  =  FormWindowState.Normal;}
运行示例,效果如下所示:

一级标题

ErrorProvider组件用于以非干扰性的方式向用户显示错误。 它通常与验证窗体上的用户输入或显示数据集中的错误结合使用。错误提供程序比在消息框中显示错误消息更好,因为一旦消除消息框,错误消息将不再可见。 该 ErrorProvider 组件在相关控件旁边显示错误图标(例如文本框;当用户将鼠标指针放在错误图标上时,将显示一个工具提示,显示错误消息字符串。

ErrorProvider组件的关键属性主要有以下几个:
ContainerControl 表示组件的父控件,通常是 Windows 窗体,以便组件在窗体上显示错误图标。
Icon,表示错误提示图标,可以设置为自定义错误图标而不是默认值。
DataSource,表示绑定错误的数据源。

首先拖动ErrorProvider控件到Form表单中,默认ContainerControl属性会自动设置为当前Form表单,Icon也有默认红色图标,如下所示:

在Form表单上拖动两个文本框控件,分别为txtName,txtAge,用于属性姓名和年龄,然后分别设置控件的Validating事件,用于验证用户属性的数据是否有效,如下所示:

在验证事件中自定义验证逻辑,如输入不合法时,则通过设置ErrorProvider的SetError方法进行设置信息,如下所示:
private  void  txtAge_Validating(object  sender,  CancelEventArgs  e){       try      {            int x =  Int32.Parse(txtAge.Text);            errorProvider1.SetError(txtAge,  "");      }       catch      {            errorProvider1.SetError(txtAge,  "请输入一个数字.");      }}

private  void  txtName_Validating(object  sender,  CancelEventArgs  e){       if(  this.txtName.Text.Length  >  1&&  this.txtName.Text.Length<5)      {            errorProvider1.SetError(txtName,  "");      }       else      {            errorProvider1.SetError(txtName,  "请输入长度为[2,4]的字符数");      }}
运行示例,效果如下所示:

源码获取

可以通过gitee上的库进行获取:https://gitee.com/ahsiang/winforms
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码