IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Aide pour une erreur [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Aide pour une erreur
    Bonjour,

    J'ai une erreur (voir PJ) qui se déclenche lors de la fermeture de mon application (par clic sur la croix de la fenêtre principale).
    Cette erreur se déclenche après que j'ai agrandit la taille de la fenêtre contenant mon DataGridView (ici appelé DG_ListeDegust dans le message d'erreur) à l'aide du splitter du SplitContainer dans lequel il se trouve.
    L'affichage se fait sans pb après cette opération. Ce n'est donc qu'à la fermeture de l'appli que ça plante. Et si je clique sur OK, le message se répète à l'infini (ou presque : on dirait en fait que le code balaye toutes les cellules du DG et déclenche l'erreur pour cette cellule).

    Si je fais appel à votre aide, c'est que je n'arrive pas à reproduire l'erreur en mode pas à pas. J'ai pourtant mis un point d'arrêt sur l'Event Form.Closing. Puis j'ai procédé à un débogage pas à pas qui se déroule très bien.

    Tout ce que je sais c'est que le message d'erreur provient de ma Sub DataError :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub DG_ListeDegust_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DG_ListeDegust.DataError
            MessageBox.Show(e.Exception.ToString, "DG_ListeDegust_DataError")
        End Sub
    Dans le pas à pas, je ne rentre jamais dans cette sub et je ne rentre pas non plus dans du code susceptible d'intervenir sur le DTG.

    La seule parade qui semble marcher c'est d'écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub DG_ListeDegust_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DG_ListeDegust.DataError
     
        End Sub
    Mais ça s'appelle faire l'autruche et ça ça ne me plaît pas.

    qqun pourrait-il me dire comment faire pour retrouver l'événement qui génère cette erreur ?
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    mets nous une copie de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    system.windows.forms.clipboard.settext(e.Exception.gettype.fullname & vbcrlf & e.exception.Message & vbcrlf & e.exception.stacktrace)
    msgbox ("err") ' pour savoir que "copier" a été fait
    ca copie dans le presse papier, reste à faire coller sur le forum
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour noftal,

    Ce genre de pb survient lorsqu une tache de fonds est en cours d execution notamment lors de l'appel d'1 délégué et c est le cas avec ta sub qui remonte l erreur.

    La sub est declenchée lorsque tu parcours ton DTG....dans le traitement de parcours de tes cellules il y a forcement une erreur.
    Ton DTG possede-t-il un systeme de refresh lors d un redimensionnement par exemple ou autre ?

  4. #4
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    @pol63

    J'ai fait ce que tu m'as dit : le message copié est exactement le même que celui de ma pièce jointe (sans les retours à la ligne)

    @wallace1
    Non, il n'y a pas de méthode refresh après agrandissement de la fenêtre de mon DTG.
    Ce qui est bizarre : j'ai 2 DTG l'un sur l'autre. Un bouton à bascule me permet d'afficher l'un ou l'autre.
    Je peux agrandir ou réduire leur fenêtre de la même façon.
    Si je quitte l'appli après avoir redimensionné la fenêtre alors que je suis sur le DTG 1 ==> pas d'erreur
    Si je quitte l'appli après avoir redimensionné la fenêtre alors que je suis sur le DTG 2 ==> erreur
    Si je quitte l'appli sans avoir redimensionné la fenêtre alors que je suis sur le DTG 2 ==> pas d'erreur

    Ce qui pourrait aider à la résolution de ce pb c'est de retrouver le chemin que parcourt le code lorsque je clique sur la croix fermant l'appli car visiblement, il se passe des choses autre que l'Event FormClosing que je n'arrive pas à retracer

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    moi j'ai déjà eut le dataerror quand j'essaye de mettre une image dans un colonne de type texte

    si tu mets un point d'arret sur l'event dataerror et que tu fais F11 peut etre arrivera tu sur la ligne qui a déclenché le problème
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    F11 c'est pour aller de l'avant ? Or je veux remonter le courant !

    Bon n'empêche, j'ai fait un essai et j'arrive sur la fin de la procédure qui a appelé le dataerror Il s'agit de la procédure CellPainting.
    Mais si je passe celle-ci en commentaire (ainsi que toutes les procédures événementielles liées à DTG2) je boucle indéfiniment (enfin, en apparence) sur ma Sub DataError

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    F10 et F11 avancent dans l'exécution, mais en sortie de sub on se retrouve dans l'appelant
    donc ca doit etre dans ton cellpainting que tu a un bug
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Même si je passe la sub CellPainting en commentaire ??

  9. #9
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut,
    Pour trouver d'où vient le problème tout à bord activer le débogage complet.
    Pour ce faire :
    1) Outils->Options
    2) Dans l'arbre sur la gauche, vas dans le noeud Débogage->Général
    3) Dans la liste de cases à cocher sur la droite tu doit DÉCOCHER la case "Activer Uniquement mon code (Managé uniquement)"
    4) Un peu en dessous il faut COCHER la case "Activer l'exécution pas à pas du code source du .NET Framework"

    Grâce à ces modification le déboggueur pour intercepter les exceptions où elles se produisent réellement et tu pourras passer en pas à pas (dans une certaine mesure) dans le code interne du framework. Tu pourras donc y voir les valeurs des variables ou ce genre de chose (beaucoup reste inaccessible, mais bon...)

    Ensuite, tu vas dans le menu Déboguer->Exceptions...
    Dans la fenêtre qui apparait il y a une ligne "Common Language Runtime Exceptions", tu coche les DEUX cases en face de cette ligne.

    Maintenant tu lance ton projet en débug, sans point d'arrêt et tu provoque le bug, tu devrais tomber sur l'exception là où elle se produit, avec la bonne pile d'appel.

    Par contre, attention, tu vas t'arrêter sur toutes les exceptions, même les catchées. Donc tu auras probablement pas mal de "faux positif". Il y en a notamment souvent au démarrage de l'application lors de la recherche des ressources que le .Net effectue tout seul.
    Tu pourras faire la configuration inverse pour revenir à un "déboggueur normal" une fois que tu auras trouvé la cause du problème.

  10. #10
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Merci ctxnop,
    Cette méthode m'a effectivement permis de mieux cerner le pb, en tout cas de retrouver l'instruction précise qui génère l'erreur citée au premier post.
    Il s'agit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DG_ListeDegut.Enabled = False
    En remontant le fil, je me suis aperçu que l'appli rentre dans une proc Event de type GotFocus que j'ai codée pour gérer l'entrée du focus dans un panel.
    Je ne m'explique pas pourquoi cet event est déclenché mais j'ai mis un flag pour que l'appli n'y rentre pas si l'on vient de FormClosing.

    En tout cas merci encore pour la méthode que je saurai utiliser dans d'autres occasions, sans aucun doute.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CS5] aide pour une erreur sur une page
    Par tfranc dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 07/12/2012, 22h44
  2. [SQL Server Compact Edition V3.5] Aide pour une erreur
    Par poupou63 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/07/2011, 11h01
  3. [MySQL] Demande d'aide pour une erreur php
    Par spespam dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/12/2008, 16h22
  4. Besoin d'aide pour une erreur CR_INVALID_BUFFER_USE
    Par ArkaneJouan dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 02/10/2007, 11h12
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo