2008-12-03 3 views
0

J'ai une classe VB6 avec une méthode qui génère une erreur:Pourquoi les erreurs dans les classes ne sont-elles piégées qu'à l'exécution?

Public Sub DoSomething 
    ... 
    err.Raise 12345, description:="Error message" 
    ... 
End Sub 

Cette méthode est appelée à partir d'une forme:

Public Sub ErrTest() 
    On Error Goto err1 
    obj.DoSomething 
    Exit Sub 
err1: 
    MsgBox err.Description 
End Sub 

Cela fonctionne bien lors de l'exécution, mais au moment de la conception de la gestion des erreurs ne marche pas. Au lieu de cela l'IDE VB6 affiche sa boîte de message standard à partir de laquelle je peux passer en mode débogage ou terminer le programme.

Pourquoi cela se produit-il? Puis-je l'empêcher?

Répondre

5

Dans l'IDE VB, accédez à Outils, Option, onglet Général, Trame de capture d'erreur. Je suppose que vous l'avez défini sur 'Break on All Errors', alors que vous voulez probablement 'Break on Unhandled Errors'.

Votre instruction Err.Raise génère une erreur de compilation pour moi; essayez de retirer les accolades.

En outre, vous pouvez utiliser

Err.Raise vbObjectError + 12345, Description:="Error message" 

à savoir compenser votre code d'erreur de la vbObjectError constante VB pour être sûr que vous ne recevez pas les affrontements.

+0

Wow, vous avez sauvé ma journée! –

1

Vous pouvez également modifier les options de recouvrement des erreurs en cliquant avec le bouton droit de la souris dans la fenêtre de code. Les options suivantes sont disponibles à partir de la « bascule » sous-menu:

Pause sur toutes les erreurs
Pause dans le module de classe
Pause sur les erreurs non prises en charge

Je trouve cela beaucoup plus facile que sauter la boîte de dialogue Options. ..

+0

Wow, après plus de 10 ans d'ouverture de la boîte de dialogue d'options - si j'avais déjà remarqué cela! –

Questions connexes