Programmatically create and display Notifications

来源:互联网 发布:淘宝等级最高的店铺 编辑:程序博客网 时间:2024/06/06 01:19

原博文传送门

 

 

      Windows Mobile(下文简写为WM)操作系统提供了一个通知的特性,它可以被用来在当前表单(form)中显示一个土司(toast)形状或者弹出的气球形状的系统提示(prompt)(具体显示为何形状取决于操作系统版本),甚至你的程序在后台运行也可以显示该提示。这种后台任务完成就由该应用通知用户或者做一些别的展示的方式是非常理想的。


Notification

 

 

平台支持

      提示框只被WM专业版或者传统版(也就是Pocket PC)设备支持,WM标准版(也就是Smartphone)设备不支持该组件。如果你开发一个带有该提示框的CFCompact Framework)应用,要注意,若是编译时的目标平台为WM标准设备时,会在执行应用时引起一个NotSupportedException的异常。

      使用Microsoft.WindowsCE.Forms.Notification 类需添加 Microsoft.WindowsCE.Forms.dll 的引用。

一种最简单的方式是从“工具箱”里拖一个Notification组件放到你的设计器里来获取该引用,然后就可以配置你的提示框了。以上操作会自动的添加需要的引用到你的工程里,并且可以通过“属性”窗体来配置提示框的属性。

提示框属性(Notification Properties

它有以下属性:

 

Caption ——显示在提示框最上面的标题栏里的文字。

Text —— 显示在提示框最主要的地方,可以包含HTML的内容,这允许你格式化你需要显示的内容,比如不同颜色的文字,等等。

Critical —— 一个布尔值,如果其设置为true则表示这个提示非常急切。呈现的效果就是提示框的边框颜色不同了,更为醒目。

Icon —— 显示在导航条上的图标样式,用户只要轻轻的点击这个图标,被隐藏的提示框就会显示出来,所以这个图标需要能典型的代表其含义。

InitialDuration —— 组件可见的时间,秒为单位,组件隐藏时不算。当时间过期时,提示会自动隐藏,此时用户必须重新点击导航栏里的图标让它再次显示。如果该值被设置为0,则不会弹出下方的提示框而是只在导航栏显示图标。

Visible —— 设置其为true,则提示框的气泡会显示在屏幕上。


显示提示

显示提示和创建一个Notification类实例一样简单,为了需要的效果设置属性,然后设置Visible属性为true,以下是代码:

 

 

 

      有一个很重要的事情这里要提一下,我们在button1_Click方法中没有用到本地变量。我们采取该做法是由于其CLR(通用语言运行库)和垃圾回收机制。虽然使用本地变量也可以运行,但是无法得到保证(guaranteed)并且潜伏(potentially)着引起不可预测(unpredictable)反应的危险。(下面的章节会有更多内容)

      还有一个值得进一步讨论的是Icon。你可以用很多方法储存一个icon。最简单的方式是使用VS2005工程想到提供的Resources.resx文件来帮你创建并且保存该icon,下面的截图展示了它在解决方案里的位置。你打开它就可以添加新的icon,并且这些资源可以在Properties.Resources 类中通过强类型属性被关联。

 


在Resources.resx里面添加icon

 

 

隐藏提示框

      这里有两种方法移除一个屏幕上显示的提示框。你可以简单的将Visible属性设为false,如下代码所示:

 

      方法有一个好处,如果你打算重新显示该组件,只要简单的设置Visible属性为true即可。

      另外一个方法(alternative approach)则是访问Dispose方法,示例代码如下:

 

      一旦你这么做了,那么该组件则会被清除,你不能简单的通过设置Visibletrue来让它重新显示,除非重新构造一个新的Notification类的实例。

      之前我们提到了你不能用局部变量引用你的Notification对象。最后的代码例子展示了原因。如果你在button1_Click方法里保存一个notification的局部变量,当方法执行结束的时候垃圾回收器会把这个变量标记潜在的垃圾。如果开始回收垃圾,并且决定回收该引用(译者注:不一定会马上回收该引用,而是有一个决策表,当其有需要被回收的时候才会发生对其引用内存的清理,参考JAVA里面GC机制,有强弱引用,有不同的回收优先度),然后垃圾回收其就会访问Dispose方法,然后它就会从屏幕上被移除。如果在该表单(form)里使用成员变量去引用它的实例则可以保持该引用一直“存活”,从而不被垃圾收集器给摧毁,直到这个表单关闭(译者注:也就是某表单调用其自己的Dispose,会自动调用成员变量的Dispose,而隐藏表单时不会调用Dispose)。


检测提示框何时被隐藏

      当提示的气泡被显示或者隐藏的时候会触发Notification类的BallonChanged事件。

      如下代码,展示了如何在气泡被隐藏有所表示:

 

      提供一个简单的程序下载。

      下载传送门:notificationtest.zip

      该链接直接连至原作者的博客,如果无法下载,可以e-mail给我索取该文件(mailto:yin.yan@amdocschina.cn)

     

      它展示了Notification类的使用方法,并且可以让你尝试改变其属性并且观察提示框显示上有什么变化。

      这里我们少讨论了Notification的成员,就是 ResponseSubmitted 事件方法。它能够处理用户在提示框里操作回馈的信息。比如在一个notification里的HTML文本,你可以创建一对radio按钮,和一个文本框,通过ResponseSubmitted事件,你可以用用户在这里输入的值来改变你程序的状态,在下篇博文里会讨论该主题。

 

原创粉丝点击