-------------201610212046更新-------------

更新至2.0版,基本完全重写,重点:

  • 改为基于原生LayeredWindow窗体和UpdateLayeredWindow API呈现动画,完全摒弃.net Form,这种消息框用前者再适合不过,后者对于这种场景过于臃肿了
  • 更高更快更强,更酷更炫更拉轰
  • 可自由定制若干消息窗样式。1.0版似乎只能换个图标而已

项目已更新至开源仓库,有需要请自取。看图:

-------------201608301610更新-------------

根据几位猿友在评论中反馈的问题和建议做了更新,主要内容:

  • ShowXX的时候如果不指定point参数,则根据活动控件来确定显示位置,如果活动控件是文本输入类控件,则根据光标位置来确定
  • 如果指定了point参数,则直接根据该point来确定
  • 另外增加了一组ShowXX重载,接受Control和ToolStripItem(工具栏按钮等,下称item)对象,完了根据该对象来确定显示位置。这里要注意,item是无焦点的,所以在MessageTip中无法得知点击的是item,也就无法做到自动在item附近显示,所以这里有个最佳实践:就是如果想在item附近显示,那就需要使用上述重载,把item传进去;其余情况都可以让MessageTip自动判断显示位置
  • 显示位置太靠屏幕顶部时,改在基准点下方显示,并且动画由上浮改为下降
  • 多屏环境下的定位错误问题,目前是将消息框限定在基准点所在屏幕内显示
  • 对于有位猿友提到的偶发异常,由于在我的环境始终无法重现,所以只能猜测是在Load事件和OnPaint中同时争用TipIcon所致,暂且给TipIcon的getter加独占特性,希望能解决

原文和网盘demo我就不更新了,项目已开源到如下几处,有兴趣的朋友请关注,欢迎fork/push/pull:

-------------原文-------------

注:本组件适用于.net2.0+的winform项目

样子:

实际效果比这gif顺滑,建议下载文末的Tester体验

介绍:

如图所见,这种提示在网页、手机上用的较多,相比正经的消息框(如MessageBox),我认为好处有:

  • 不需要用户对消息本身做出响应,点啥【确定】什么的
  • 不阻塞、不干预用户的后续操作,就是单纯告诉你一声完事了
  • 视觉上通过动画效果保证消息的送达性,弥补因无干预可能造成的“被无视”

这就是我所谓的【轻快型消息提示窗】,适用于:

  • 能快速出结果的操作,比如在本地库跑个小语句啥的。如果是耗时操作,显然弄个进度提示更合适,比如这个
  • 只需要反馈小量信息的情形,通常不应超过15字。如果需要反馈大量信息,可以尝试这个

特点:

  • 在鼠标附近显示消息。所以不适合耗时任务,因为等任务执行完,鼠标都不知跑哪里去了
  • 内置3种消息性质的图标,,亦可使用自定义图标(使用Show方法)
  • 上浮动画效果可开闭(属性AllowFloating,影响后续弹出的消息窗)
  • 可以只显示图标或文本,甚至图标文本全无也行~虽然这样没意思

用法:

//开闭上浮动画。默认开启
MessageTip.AllowFloating = true|false; //默认停留时长(毫秒)。当ShowXXX中指定负值delay时,使用该值,默认500
MessageTip.DefaultDelay = int; //文本(可为null或"",下同)、图标(为null时不显示图标)、停留时长(可选,下同,负值则使用DefaultDelay)
MessageTip.Show("阿斯蒂芬", image | null, [delay]); //文本,内置的绿勾图标,停留时长
MessageTip.ShowOk("执行成功", [delay]); //文本,内置的黄色感叹号图标,停留时长
MessageTip.ShowWarning("执行成功", [delay]); //文本,内置的红叉图标,停留时长
MessageTip.ShowError("执行成功", [delay]);

背景:

这东西我很早就想写了,因为很多时候正儿八经的弹出个MessageBox会影响心情,本来就是告知一声的事情,非得要去点一下确定,烦人,但因为一直有各种破事,到今天才弄。一开始是用AnimateWindow这个win32 API实现(MSDN),但它没有上浮的效果,所以干脆自己实现,原理无非是步进修改窗体的透明度(Opacity)和位置(Location),只是采用了异步的手段。异步在两个地方有使用,一是改变Location,目的是不让它与透明度动画打架;二是Show窗体时也是异步,目的是从线程层面完全与主UI线程隔离,达到快速Show出多个消息的效果,如图:

不然就只能等一个消息完全消失完才能显示下一个,并且在主线程Show的话,有可能阻塞用户的其它操作。

最后,恳请指出问题,或告知已有的更好方案,感谢!

工程已放网盘,里面有个Tester供你体验,就是第一幅图那个。http://pan.baidu.com/s/1dEVjzMD

-文毕-

【C#】组件发布:MessageTip,轻快型消息提示窗的更多相关文章

  1. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  2. element组件dialog关闭时Message消息提示抖动问题

    在页面内容较多,出现滚动条时使用element组件里的dialog组件,当关闭dialog组件的同时弹出Message消息提示时,Message会抖动一下. 在页面有滚动条的情况先打开dialog时, ...

  3. 【WPF】屏幕右下角消息提示框

    WPF做一个仿QQ的右下角消息提示窗,网上找到几个Demo后,选了一个比较好用的. 博客 http://blog.csdn.net/huangli321456/article/details/5052 ...

  4. ymPrompt.js消息提示组件

    转载:https://www.cnblogs.com/linzheng/archive/2010/11/15/1878058.html 使用说明: 1.在页面中引入ymPrompt.js.如:< ...

  5. 消息提示插件toastr.js与Messenger组件

    Toastr是一款基于jQuery的通知插件,可以灵活的自定义样式和拓展其功能! toastr是一个基于Jquery简单.漂亮的消息提示插件,使用简单.方便,可以根据设置的超时时间自动消失. cdn最 ...

  6. asp.net中调用COM组件发布IIS时常见错误 80070005解决方案

    很多人在.net开发Web站点中引用了COM组件,调试时一切正常,但一发布到IIS下就提示如下错误: 检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005 ...

  7. 第13讲- Android之消息提示Notification

    第13讲 Android之消息提示Notification .Notification Notification可以理解为通知的意思一般用来显示广播信息,通知可以显示到系统的上方的状态栏(status ...

  8. Android消息提示框Toast

    Android消息提示框Toast Toast是Android中一种简易的消息提示框.和Dialog不一样的是,Toast是没有焦点的,toast提示框不能被用户点击,而且Toast显示的时间有限,t ...

  9. Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影

    效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...

随机推荐

  1. Linux之搭建自己的根文件系统

    Hi!大家好,我是CrazyCatJack.又和大家见面了.今天给大家带来的是构建Linux下的根文件系统.希望大家看过之后都能构建出符合自己需求的根文件系统^_^ 1.内容概述 1.构造过程 今天给 ...

  2. 2016/12/31_Python

    今天学习主要内容: Python: 1.with语句(补充昨天的文件操作) 用with打开的文件在脚本结束会自动关闭,以防普通打开方式忘记关闭文件连接 语法: with open("demo ...

  3. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  4. 浅谈Web自适应

    前言 随着移动设备的普及,移动web在前端工程师们的工作中占有越来越重要的位置.移动设备更新速度频繁,手机厂商繁多,导致的问题是每一台机器的屏幕宽度和分辨率不一样.这给我们在编写前端界面时增加了困难, ...

  5. windows 7(32/64位)GHO安装指南(序篇)~

    大家好,本人是高三刚毕业,即将踏入校园的程序猿~我写这篇文章呢,主要是想巩固一下之前对于电脑的基础知识理论,也希望能帮助没有电脑基础的同学能维护一下自己的电脑,要是能帮助女生修电脑那就是更好啦~~哈哈 ...

  6. Bash 脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...

  7. [Javascript] 爬虫 模拟新浪微博登陆

     概述: 由于业务需要,要编写爬虫代码去爬去新浪微博用户的信息. 虽然在网上能找到不少信息,但由于新浪微博改版,其登陆机制进行了修改,故很多老的文章就不适合用了. 经过一番摸索,成功模拟新浪微博的登陆 ...

  8. Integer.parseInt 引发的血案

    Integer.parseInt 处理一个空字符串, 结果出错了, 程序没有注意到,搞了很久, 引发了血案啊!! 最后,终于 观察到了, 最后的部分: Caused by: java.lang.NoC ...

  9. Windows 10 部署Enterprise Solution 5.5

    Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...

  10. NotePad++中JSLint的使用

    1.第一步下载Notepad++ 2.安装JSLint插件 3.运行JSlint 4.前提是你设置了当前语言或者本身文件就是js 5.JSLint的作用主要就是检查你的JS的规则正确性(至少是绝大部分 ...