【C#】分享一个带附加消息的增强消息框MessageBoxEx
适用于:.net 2.0+的Winform项目
样子:有损录制+制图的原因不可能原样展示出真实效果,可至文章结尾下载Demo体验。
相对父窗体居中
可附带附加消息。附加消息可以是string和Exception类型,【详细信息】按钮会根据是否传入附加信息显示和隐藏
展开/收起附加信息时有动画效果。实用为王的你亦可设置EnableAnimate=false关闭动画效果
根据传入的MessageBoxIcon,有不同的声音反馈。这个是NT5的消息框固有的能力,但NT6的消息框却没有声音,猜想可能MS在NT6+有弃用MessageBeep这一API的打算。本消息框通过使用PlaySound API重新让消息有了声音反馈,同时亦提供了EnableSound属性允许你关闭声音反馈
移除了标准MessageBox提供的IWin32Window、MessageBoxOptions和Help相关参数,原因是我用不到,懒得实现^_^
可拖拉改变消息框尺寸,消息文本和附加文本会随窗体大小重排。这是标准消息框未提供的能力。改变尺寸分两种情况有不同的行为:①详细信息未展开时,改变的是主消息区大小;②详细信息展开时,改变的是详细信息区的大小
总体来说,此消息框比较适合用在需要反馈大量消息文本的场合,用标准消息框的话,文本太多可能会使消息框超出屏幕大小,比如codeproject.com上这位老兄举的例子,由于标准消息框不具备改变窗体大小的能力,将导致部分消息无法让用户看到。而就算没有超出屏幕,一下子让用户面对那么多消息文字,体验也不地道。使用本消息框就可以解决此类问题,比如可以将扼要信息显示在主消息区,将大量的明细消息(例如批量处理中的单项处理情况)、次要消息、异常信息等放置在详细信息区,由用户或IT支持人员自己去展开获取这些信息。同时,在没有附加消息的时候,你仍然可以像标准消息框一样使用它,所以,如果你跟我一样不会用到标准消息框的IWin32Window、MessageBoxOptions和Help相关参数的话,基本上你可以在整个项目中全程用此消息框替换掉标准消息框,别忘了相比标准消息框,它还具备了可缩放、NT6下有声音、相对父窗体居中等额外能力。总言之,你值得拥有。至于如果你担心性能问题,这个~我想这么说,我对自己的代码质量还是有点信心的。也希望能得大侠指出槽点,感激!
使用说明:先看公开成员:
//静态属性 MessageBoxEx.EnableAnimate MessageBoxEx.EnableSound //静态方法 MessageBoxEx.Show(string, string, string) MessageBoxEx.Show(string, string, string, MessageBoxButtons) MessageBoxEx.Show(string, string, string, MessageBoxButtons, MessageBoxIcon) MessageBoxEx.Show(string, string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton) MessageBoxEx.Show(string, string, Exception) MessageBoxEx.Show(string, string, Exception, MessageBoxButtons) MessageBoxEx.Show(string, string, Exception, MessageBoxButtons, MessageBoxIcon) MessageBoxEx.Show(string, string, Exception, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)
属性EnableAnimate和EnableSound上面提过,分别是用来启用/关闭动画、声音效果的,默认是都启用。俩属性影响范围是全局的,比如设置EnableAnimate = false后,之后弹出的MessageBoxEx都没有动画效果,直到重新设为true,EnableSound亦然。最佳实践是将它俩与用户偏好设置相关联,允许用户自主控制。
方法则只有一个:Show(),从重载列表你大概都能知道如何使用。其中第3个参数就是附加消息,可接受string和Exception类的实例,其余参数的位置和意义与标准消息框一致。简要示例如下:
MessageBoxEx.Show("主消息", "标题", "附加消息", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); MessageBoxEx.Show("主消息", "标题", ex, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
前3个参数可以放心为null,内部有处理,后面的枚举你也null不了,如果传入无效枚举值,会抛异常。
只有3个string参数的那个方法,后面俩参数是可选的。所以不讲究消息体验的你仍然可以这样使用:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70050.html