惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
AI
AI
美团技术团队
人人都是产品经理
人人都是产品经理
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
宝玉的分享
宝玉的分享
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
大猫的无限游戏
大猫的无限游戏
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
罗磊的独立博客
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
博客园 - 【当耐特】
K
Kaspersky official blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
F
Full Disclosure
Google DeepMind News
Google DeepMind News
V
V2EX
博客园 - 聂微东
量子位
云风的 BLOG
云风的 BLOG
C
Check Point Blog
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
The GitHub Blog
The GitHub Blog

博客园 - 老码识途呀

基于.NET的Windows窗体编程之WinForms时间控件 基于.NET的Windows窗体编程之WinForms图表控件 基于.NET的Windows窗体编程之WinForms输入与显示 基于.NET的Windows窗体编程之WinForms菜单工具栏 基于.NET的Windows窗体编程之WinForms打印 基于.NET的Windows窗体编程之WinForms对话框 基于.NET的Windows窗体编程之WinForms列表控件 基于.NET的Windows窗体编程之WinForms数据表格 基于.NET的Windows窗体编程之WinForms事件简介 基于.NET的Windows窗体编程之WinForms布局简介 基于.NET的Windows窗体编程之WinForms控件简介 基于.NET的Windows窗体编程之WinForms入门简介 推荐一款基于.NET和百度飞桨的OCR识别组件 新书速递,手把手教你WPF入门与开发 推荐一种并发线程中资源同步常用方法 推荐一种手动设置异步线程等待机制的解决方案 推荐一种异步线程执行过程中更新进度的方法 推荐一款基于.NET的进程间数据交互经典解决方案 推荐一款线程or进程间数据同步解决方案 推荐一款代码规范检查(CodeReview)神器 推荐一款高性能状态机管理解决方案 推荐一款进程间高速交换数据的解决方案 推荐一款基于.NET的进程间通信框架 推荐一款基于EF-Core的分库分表利器 推荐一种程序崩溃闪退或卡死的分析方法 推荐一款Excel读写神器之MiniExcel入门详解 推荐一款Ioc容器之Ninject入门详解 ASP.NET Core WebApi+React UI开发入门详解
基于.NET的Windows窗体编程之WinForms提示控件
老码识途呀 · 2026-06-29 · via 博客园 - 老码识途呀

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

image

概述

在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表单上显示,而是显示在组件托盘中,如下所示:

image

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

image

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

image

也可以在后台代码中设置控件的ToolTip,如在Form的Load事件中,设置按钮的工具提示,如下所示:

private void FrmTips_Load(object sender, EventArgs e)
{
    this.toolTip1.SetToolTip(this.btnOpen, "Please click it to open the file dialog.");
}

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

image

NotifyIcon

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

  • Icon 属性设置显示在状态区域中的图标。 
  • Visible 表示控件是否显示,若要显示图标,必须将Visible设置为true。
  • BalloonTipText,表示气球状提示关联的文本
  • BalloonTipIcon,表示气球状提示关联的图标 
  • BalloonTipTitle,表示气球状提示关联的标题

NotifyIcon的关键事件:

  • DoubleClick 事件处理程序中编写代码,以便在用户双击图标时发生某种情况。 

首先拖动NotifyIcon控件到Form表单中,然后设置NotifyIcon的相关属性(如Icon,Visible)等,如下所示:

image

在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事件,当点击时触发响应,如下所示:

image

Click事件的内容如下所示:

private void notifyIcon1_Click(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Normal;
}

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

image

ErrorProvider

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

  • ContainerControl 表示组件的父控件,通常是 Windows 窗体,以便组件在窗体上显示错误图标。
  • Icon,表示错误提示图标,可以设置为自定义错误图标而不是默认值。
  • DataSource,表示绑定错误的数据源。

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

image

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

image

在验证事件中自定义验证逻辑,如输入不合法时,则通过设置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]的字符数");
    }
}

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

image

以上就是《基于.NET的Windows窗体编程之WinForms提示控件》的全部内容,旨在抛砖引玉,一起学习,共同进步!!!