• VB6中的ErrorHelper


    今天还是修改原先VB6处理的程序,在错误处理方面需要一些改进,弄了一个ErrorHelper的类,还是有点用处的,存到这里吧.

    Option Explicit

    Private m_Continue As Boolean

    Private m_MessageString As String

    Private m_DisplayDetailErrInfo As Boolean

    Public Event onError()

    '解析错误对象
    '
    DefaultMessageString:显示的提示消息,如果为空则显示缺省消息
    '
    frm:处理卸载窗体,可选
    Public Function Parse(Optional DefaultMessageString As StringOptional frm As Form)
        
    Select Case Err.Number
            
    Case 0
                m_Continue 
    = False
            
    Case Else
                
    If IsMissing(DefaultMessageString) Or Len(DefaultMessageString) = 0 Then
                    
    If m_DisplayDetailErrInfo Then
                        
    MsgBox MergeMessage(DefaultMessage), vbCritical, "提示"
                    Else
                        
    MsgBox DefaultMessage, vbCritical, "提示"
                    End If
                
    Else
                    
    If m_DisplayDetailErrInfo Then
                        
    MsgBox MergeMessage(DefaultMessageString), vbCritical, "提示"
                    Else
                        
    MsgBox DefaultMessageString, vbCritical, "提示"
                    End If
                
    End If
                
    If Not IsMissing(frm) Then
                    ExitForm frm
                
    End If
                m_Continue 
    = True
                
    RaiseEvent onError
        
    End Select
        Err.Clear
    End Function


    '处理完错误后是否进行其他处理
    Public Property Get Continue() As Boolean
        Continue 
    = m_Continue
    End Property


    '缺省消息
    Public Property Get DefaultMessage() As String
        DefaultMessage 
    = m_MessageString
    End Property


    Public Property Let DefaultMessage(ByVal MessageString As String)
        m_MessageString 
    = MessageString
    End Property


    '卸载窗口
    Public Sub ExitForm(frm As Form)
        
    If Not frm Is Nothing Then Unload frm
    End Sub


    '是否显示错误消息
    Public Property Get DisplayDetailErrInfo() As Boolean
        DisplayDetailErrInfo 
    = m_DisplayDetailErrInfo
    End Property


    Public Property Let DisplayDetailErrInfo(ByVal Display As Boolean)
        m_DisplayDetailErrInfo 
    = Display
    End Property


    '合并消息
    Private Function MergeMessage(Message As StringAs String
        MergeMessage 
    = MergeString("消息:" & Message, vbCrLf, "编号:", Err.Number, vbCrLf, "说明:", Err.Description)
    End Function


    '合并字符串
    Private Function MergeString(ParamArray arg()) As String
        
    Dim i As Integer
        
    For i = 0 To UBound(arg())
            MergeString 
    = MergeString & arg(i)
        
    Next
    End Function


    Private Sub Class_Initialize()
        
    Me.DefaultMessage = "数据产生冲突,请重新进入该功能."
        Me.DisplayDetailErrInfo = False
    End Sub


    '退出整个系统
    Public Sub ExitSystem()
        
    MsgBox "产生致命错误,系统即将关闭.", vbCritical, "提示"
        End
    End Sub

    测试代码:
    Dim WithEvents eh As ErrorHelper

    Private Sub Command1_Click()
    #
    If ErrorOnOff = 0 Then
        
    On Error GoTo onErrors
    #
    End If
        Err.Raise 
    100
        
    MsgBox "OK"
    onErrors:
        eh.Parse
        
    'If eh.Continue Then eh.ExitSystem
        'If eh.Continue Then Resume Next
    End Sub


    Private Sub eh_onError()
        Unload 
    Me
    End Sub


    Private Sub Form_Load()
        
    Set eh = New ErrorHelper
    End Sub


    通过这些代码可以节约一些重复代码的数量,作为一个小的底层错误处理机制应该还可以.
  • 相关阅读:
    20135313_exp4
    20135313_exp5
    学习分块
    学习BM算法
    学习笛卡尔树
    【数学】Eddy Walker
    【bitset】Kth Minimum Clique
    【搜索】n的约数
    【搜索】Partition problem
    【信息学奥赛一本通 提高组】第四章 广搜的优化技巧
  • 原文地址:https://www.cnblogs.com/Duiker/p/228650.html
Copyright © 2020-2023  润新知