WinForm程序开发中,在开发模式下对于异常的处理一般都是通过调试的方式来查找异常发生的未知与原因。

下面以“除数为0”的情况来具体说明。

Button按钮事件如下:

 private void button1_Click(object sender,EventArgs e)
{
int numA = ;
int numB = ; try
{
decimal result = numA / numB;
}
catch(Exception ex)
{
throw ex;
}
}

编译后运行程序,点击按钮,抛出异常

上图中虽然提示出“尝试除以零”的异常信息,但是“详细信息”按钮下显示的具体提示信息显示的不是很友好。

下面给出一种更加友好的处理方式,在开发与测试时都可以使用。

微软的SQL Server数据库产品中提供了非常多的公用DLL。

如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径

SQL2005  C:Program FilesMicrosoft SQL Server90SDKAssemblies

SQL2008  C:Program FilesMicrosoft SQL Server100SDKAssemblies

其中Microsoft.ExceptionMessageBox.dll 中的  ExceptionMessageBox 类 提供了显示异常详细信息的弹窗处理功能。

项目中首先添加该dll的引用

并添加Using引用

Button按钮事件修改如下:

  bool alwaysShow = true; //定义全局变量,用于控制是否每次都显示相同的异常信息

         private void button1_Click(object sender,EventArgs e)
{
int numA = ;
int numB = ; try
{
decimal result = numA / numB;
}
catch(Exception ex)
{
if(alwaysShow)
{
ExceptionMessageBox msgBox = new ExceptionMessageBox();
msgBox.InnerException = ex;
msgBox.Text = "异常信息!"; //获取或设置要在异常消息框中显示的顶级消息的文本
msgBox.Caption = "测试异常"; //获取或设置异常消息框的对话框标题 msgBox.Beep = true; //指定在显示消息时是否播放可听到的声音 msgBox.ShowToolBar = true; msgBox.Buttons = ExceptionMessageBoxButtons.OKCancel; //获取或设置要在消息框中显示的按钮
msgBox.SetButtonText("确定","取消"); msgBox.ShowCheckBox = true;
msgBox.IsCheckBoxChecked = true;
msgBox.CheckBoxText = "总是显示该信息"; msgBox.HelpLink = ex.HelpLink; //获取或设置指向与顶级消息相关联的帮助文件或帮助网页的链接 DialogResult dr = msgBox.Show(this); if(dr == DialogResult.OK)
{
MessageBox.Show("点击了【确定】按钮!" + ex.StackTrace);
} alwaysShow = msgBox.IsCheckBoxChecked;
}
}
}
ExceptionMessageBox 类提供了弹窗显示异常信息的功能。
编译后再次运行程序,点击

点击左下角的第2个按钮【显示详细的技术信息】,弹出如下窗体,

该窗体中把所有的异常信息以树状方式列出,点击不同的树节点,右侧显示对应具体的异常信息。

该中展现方式更加直观明了,更便于开发环境下异常的跟踪与处理。

关于ExceptionMessageBox更加详细的信息请参考MSDN:

https://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.messagebox.exceptionmessagebox.aspx

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示的更多相关文章

  1. 如何捕获winform程序全局异常?(续)

    前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...

  2. 如何捕获winform程序全局异常?

    1.在C#中我们如何处理异常? 上面的问题学过C#的问题大家可能都能回答处理,用try-catch-finally具体如下: try { //可能出错的语句 } catch (Exception) { ...

  3. 转:如何捕获winform程序全局异常?

    前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...

  4. C#使用IrisSkin2.dll美化WinForm程序界面

    一.添加控件IrisSkin2.dll. 方法:         1.右键“工具箱”.“添加选项卡”,取名“皮肤”.         2.右键“皮肤”,“选择项”弹出对话框        3.点击“浏 ...

  5. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  6. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

  7. 在Winform程序中设置管理员权限及为用户组添加写入权限

    在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...

  8. (转)在Winform程序中设置管理员权限及为用户组添加写入权限

    本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...

  9. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...

随机推荐

  1. C-Sharp网络编程案例解析(Socket类的使用)

    Server端: using System; using System.Collections.Generic; using System.Text; using System.Net; using ...

  2. 使用IDA静态分析解密《舰娘Collection》的lua脚本

    好久没写东西了,换工作之后忙得一比.你说创业?风太大没听清啊看了看以前写的东西,觉得以前写得太严肃了,从现在开始要轻松一点,要做一名逗逼码农. 本文不会介绍破解的细节,最终完成破解所编写的代码也不会公 ...

  3. ORA-02266: 表中的唯一/主键被启用的外键引用

    http://www.cnblogs.com/cici-new/archive/2013/01/01/2841700.html 需要如下操作 先取消子表外键的外键约束,之后删除父表数据,最后再次启用外 ...

  4. oracle求时间差的常用函数

    oracle求时间差的常用函数   求时间差:    天:  ROUND(TO_NUMBER(END_DATE - START_DATE))    小时:  ROUND(TO_NUMBER(END_D ...

  5. C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!

    说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...

  6. Bootstrap入门(十五)组件9:面板组件

    Bootstrap入门(十五)组件9:面板组件 虽然不总是必须,但是某些时候你可能需要将某些 DOM 内容放到一个盒子里.对于这种情况,可以试试面板组件. 1.基本实例 2.带标题的面板 3.情景效果 ...

  7. Excel里函数中的万金油,你确定不要点进来看看?

    Excel里函数中的万金油,你确定不要点进来看看? 来源:EXCELHome Excel里有个号称"万能"的函数组合,这个函数组合就是INDEX+SMALL+IF,很多应用场合都能 ...

  8. Docker环境中部署OwnCloud 9.0

    整体思路: 1.官方获取mysql.php+apache镜像: 2.基于php+apache,创建OwnCloud镜像: 3.启动mysql镜像: 4.启动OwnCloud镜像,链接mysql镜像,访 ...

  9. PHP使用hash_algos函数计算哈希值,之间的性能排序

    PHP从5.1.2版本以上开始支持hash_algos函数,看这个名字就知道了,algos在英文中也表示算法的意思,hash_algos就是哈希算法,收集了一些常用的哈希算法,从5.1.2开始不同版本 ...

  10. [CSS3] 学习笔记-HTML与CSS简单页面效果实例

    一个简单的首页的设计: html文件: <!doctype html> <html> <head> <meta charset="UTF-8&quo ...