diff --git a/GUIs.Common/Base/BaseErrorHandler.vb b/GUIs.Common/Base/BaseErrorHandler.vb new file mode 100644 index 00000000..9773027d --- /dev/null +++ b/GUIs.Common/Base/BaseErrorHandler.vb @@ -0,0 +1,103 @@ +Imports System.Reflection +Imports System.Windows.Forms +Imports DigitalData.Modules.Logging + +Namespace Base + Public Class BaseErrorHandler + Private _LogConfig As LogConfig + Private _Logger As Logger + Private _Form As Form + + Private Const UNKNOWN_METHOD = "Unknown Method" + Private Const UNKNOWN_FORM = "Unknown Form" + + Public Sub New(LogConfig As LogConfig, Logger As Logger, Form As Form) + _LogConfig = LogConfig + _Logger = Logger + _Form = Form + End Sub + + Public Sub ShowErrorMessage(Exception As Exception) + _Logger.Error(Exception) + MessageBox.Show(GetMessage(Exception), _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + End Sub + + Public Sub ShowInfoMessage(Text As String) + _Logger.Info(Text) + MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) + End Sub + + Private Function GetMessage(Exception As Exception) As String + Dim oTargetSite = Exception.TargetSite + Dim oMethodName = GetMethodName(Exception) + Dim oFormName = GetFormName(Exception) + Dim oMessage As String = String.Empty + + If TypeOf Exception Is SqlClient.SqlException Then + Dim oNumber As Integer = DirectCast(Exception, SqlClient.SqlException).Number + Select Case oNumber + Case 2627 + oMessage = "Es wurde ein Doppelter Wert in eine Spalte eingetragen, die einzigartig sein muss." + End Select + ElseIf TypeOf Exception Is NoNullAllowedException Then + oMessage = "Einige benötigte Felder wurde nicht ausgefüllt." + Else + oMessage = $"Es ist ein unerwarteter Fehler in {oFormName}/{oMethodName} aufgetreten. Mehr Informationen finden Sie im Log." + End If + + If _LogConfig.Debug Then + oMessage &= vbNewLine & vbNewLine & "== Debug Informationen ==" + oMessage &= vbNewLine & vbNewLine & "Die ursprüngliche Fehlermeldung lautet:" + oMessage &= vbNewLine & Exception.Message + oMessage &= vbNewLine & vbNewLine & "Stacktrace:" + oMessage &= vbNewLine & Exception.StackTrace + End If + + Return oMessage + End Function + + 'Private Function GetMessage(Exception As Exception) As String + ' Dim oTargetSite = Exception.TargetSite + ' Dim oMethodName = GetMethodName(Exception) + ' Dim oFormName = GetFormName(Exception) + ' Dim oMessage As String = String.Empty + + ' oMessage &= $"Form: {oFormName}{vbNewLine}" + ' oMessage &= $"Method: {oMethodName}{vbNewLine}" + + ' If Not String.IsNullOrEmpty(Exception.StackTrace) Then + ' oMessage &= $"Message: {Exception.Message}{vbNewLine}{vbNewLine}" + ' End If + + ' If Not String.IsNullOrEmpty(Exception.StackTrace) Then + ' oMessage &= $"Stacktrace: {Exception.StackTrace}{vbNewLine}" + ' End If + + ' oMessage &= $"{vbNewLine}" + ' oMessage &= $"Please report this error to error@digitaldata.works" + + ' Return oMessage + 'End Function + + Private Function GetMethodName(Exception As Exception) As String + Dim oMethodName = Exception.TargetSite?.Name + + If oMethodName Is Nothing Then + Return UNKNOWN_METHOD + Else + Return oMethodName + End If + End Function + + Private Function GetFormName(Exception As Exception) As String + Dim oFormName = Exception.TargetSite?.ReflectedType?.Name + + If oFormName Is Nothing Then + Return UNKNOWN_FORM + Else + Return oFormName + End If + End Function + End Class + +End Namespace diff --git a/GUIs.Common/Base/BaseMessageBox.vb b/GUIs.Common/Base/BaseMessageBox.vb deleted file mode 100644 index 460394b8..00000000 --- a/GUIs.Common/Base/BaseMessageBox.vb +++ /dev/null @@ -1,72 +0,0 @@ -Imports System.Reflection -Imports System.Windows.Forms -Imports DigitalData.Modules.Logging - -Namespace Base - Public Class BaseErrorHandler - Private _Logger As Logger - Private _Form As Form - - Private Const UNKNOWN_METHOD = "Unknown Method" - Private Const UNKNOWN_FORM = "Unknown Form" - - Public Sub New(Logger As Logger, Form As Form) - _Logger = Logger - _Form = Form - End Sub - - Public Sub ShowErrorMessage(Exception As Exception) - _Logger.Error(Exception) - MessageBox.Show(GetMessage(Exception), _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) - End Sub - - Public Sub ShowInfoMessage(Text As String) - _Logger.Info(Text) - MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) - End Sub - - Private Function GetMessage(Exception As Exception) As String - Dim oTargetSite = Exception.TargetSite - Dim oMethodName = GetMethodName(Exception) - Dim oFormName = GetFormName(Exception) - Dim oMessage As String = String.Empty - - oMessage &= $"Form: {oFormName}{vbNewLine}" - oMessage &= $"Method: {oMethodName}{vbNewLine}" - - If Not String.IsNullOrEmpty(Exception.StackTrace) Then - oMessage &= $"Message: {Exception.Message}{vbNewLine}{vbNewLine}" - End If - - If Not String.IsNullOrEmpty(Exception.StackTrace) Then - oMessage &= $"Stacktrace: {Exception.StackTrace}{vbNewLine}" - End If - - oMessage &= $"{vbNewLine}" - oMessage &= $"Please report this error to error@digitaldata.works" - - Return oMessage - End Function - - Private Function GetMethodName(Exception As Exception) As String - Dim oMethodName = Exception.TargetSite?.ReflectedType?.Name - - If oMethodName Is Nothing Then - Return UNKNOWN_METHOD - Else - Return oMethodName - End If - End Function - - Private Function GetFormName(Exception As Exception) As String - Dim oFormName = Exception.TargetSite?.ReflectedType?.ReflectedType?.Name - - If oFormName Is Nothing Then - Return UNKNOWN_FORM - Else - Return oFormName - End If - End Function - End Class - -End Namespace diff --git a/GUIs.Common/Base/BaseRibbonForm.vb b/GUIs.Common/Base/BaseRibbonForm.vb index 70364355..31498888 100644 --- a/GUIs.Common/Base/BaseRibbonForm.vb +++ b/GUIs.Common/Base/BaseRibbonForm.vb @@ -12,8 +12,6 @@ Namespace Base ''' ''' ... ''' End Class - ''' - ''' Only BaseRibbonForms can have panels attached to it! ''' Public Class BaseRibbonForm Inherits RibbonForm @@ -27,57 +25,31 @@ Namespace Base End Get End Property - ''' - ''' Sets or gets the ribbon Page that will be shown when the window is visible - ''' - ''' - Public Property DefaultRibbonPage As RibbonPage - - Protected Overrides Sub OnLoad(e As EventArgs) - MyBase.OnLoad(e) - - If DefaultRibbonPage IsNot Nothing Then - Ribbon.SelectPage(DefaultRibbonPage) - End If + Public Sub New() End Sub - Protected Overrides Sub OnVisibleChanged(e As EventArgs) - MyBase.OnVisibleChanged(e) - - If Visible And DefaultRibbonPage IsNot Nothing Then - Ribbon.SelectPage(DefaultRibbonPage) - End If - End Sub - - Protected Overrides Sub OnActivated(e As EventArgs) - MyBase.OnVisibleChanged(e) - - If Visible And DefaultRibbonPage IsNot Nothing Then - Ribbon.SelectPage(DefaultRibbonPage) - End If - End Sub - - Public Sub New(LogConfig As LogConfig) ' Get the full name of the inheriting form ' so the log messages have the right classname Dim oClassName = [GetType]().FullName - ' My.LogConfig is undefined in the designer + ' My.LogConfig is undefined in the designer _Logger = LogConfig?.GetLogger(oClassName) - _ErrorHandler = New BaseErrorHandler(_Logger, Me) + _ErrorHandler = New BaseErrorHandler(LogConfig, _Logger, Me) ' When you add something, be careful if it ' depends on a global var like My.LogConfig ' you might need to check for its existence with ? End Sub + ''' ============== PUBLIC METHODS ============== + Public Sub ShowErrorMessage(Exception As Exception) _ErrorHandler.ShowErrorMessage(Exception) End Sub Public Sub ShowErrorMessage(ErrorMessage As String) - _ErrorHandler.ShowErrorMessage(New Exception(ErrorMessage)) + _ErrorHandler.ShowErrorMessage(New ApplicationException(ErrorMessage)) End Sub End Class End Namespace