Imports System.Windows.Forms
Imports System.Threading
Imports System.Text
Public Class ExceptionDialog
#Region "Const"
Const OpenDetailButtonText As String = "v 詳細資料"
Const CloseDetailButtonText As String = "^ 詳細資料"
#End Region
#Region "Var"
Private _isDetailOpened As Boolean
#End Region
#Region "Public Shared Method"
'***************************************************************************
'Author: Larry Nung
'Date: 2009/4/9
'Purpose:
'Memo:
'***************************************************************************
''' <summary>
''' Shows the bug window on error.
''' </summary>
''' <remarks></remarks>
Public Shared Sub ShowBugWindowOnError()
AddHandler Application.ThreadException, AddressOf OnErrorOccur
End Sub
#End Region
#Region "Protected Shared Method"
'***************************************************************************
'Author: Larry Nung
'Date: 2009/4/9
'Purpose:
'Memo:
'***************************************************************************
''' <summary>
''' Called when [error occur].
''' </summary>
''' <param name="sender">The sender.</param>
''' <param name="e">The <see cref="System.Threading.ThreadExceptionEventArgs" /> instance containing the event data.</param>
''' <remarks></remarks>
Protected Shared Sub OnErrorOccur(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs)
Dim errorDlg As New ExceptionDialog
errorDlg.DetailErrorMsg_TextBox.Text = GetDetailErrorMsg(e.Exception)
errorDlg.ShowDialog()
End Sub
#End Region
#Region "Private Shared Method"
'***************************************************************************
'Author: Larry Nung
'Date: 2009/4/9
'Purpose:
'Memo:
'***************************************************************************
''' <summary>
''' Gets the detail error MSG.
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Function GetDetailErrorMsg(ByVal e As Exception) As String
Dim str As New StringBuilder
str.AppendLine(String.Format("Source: {0}", e.Source))
str.AppendLine(String.Format("Message: {0}", e.Message))
str.AppendLine(String.Format("TargetSite: {0}", e.TargetSite))
str.AppendLine("")
str.AppendLine("StackTrace: ")
str.AppendLine(e.StackTrace)
Return str.ToString
End Function
#End Region
#Region "Event Process"
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Application.Exit()
End Sub
Private Sub Detail_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Detail_Button.Click
_isDetailOpened = Not _isDetailOpened
Detail_Button.Text = If(_isDetailOpened, CloseDetailButtonText, OpenDetailButtonText)
Me.Height = If(_isDetailOpened, Me.DetailErrorMsg_TextBox.Bottom, Me.DetailErrorMsg_TextBox.Top) + 32
End Sub
Private Sub ExceptionDialog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Height = Me.DetailErrorMsg_TextBox.Top + 32
Me.ErrorIcon_Label.Image = SystemIcons.Error.ToBitmap
End Sub
#End Region
End Class