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 :

Bug bizarre avec l'instruction "end"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut Bug bizarre avec l'instruction "end"
    Bonjour,

    De temps en temps, mais assez rarement, j'ai une exception qui se produit lorsque je quitte mon application

    C'est l'instruction "End" qui déclenche une erreur "System.ComponentModel.Win32Exception" et plus exactement "Error creating window handle"

    Mon appli compte plusieurs fenêtres, la fenêtre de démarrage (FrmEtape1) n'est affichée qu'au début, on peut quitter l'appli lorsqu'une autre fenêtre est affichée sans que la fenêtre de démarrage soit affichée

    Exemple de code pour la fenêtre FrmEtape5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub FrmEtape5_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            If Quitter() Then
                End ' Application.Exit()
            Else
                e.Cancel = True
            End If
        End Sub
     
        Private Sub ButFermer_Click(sender As System.Object, e As System.EventArgs) Handles ButFermer.Click
            If Quitter() Then End ' Application.Exit()
        End Sub
    Code de la procédure Quitter() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Public Function Quitter() As Boolean
            Return FrmMsgBox.Montrer(Msg_VoulezVousQuitter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes
        End Function
    A bientôt

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    End est un héritage du BASIC d'origine et a été maintenu pour des raisons de compatibilité. Regarde les remarques en bas du cadre, dans cette page. C'est le End de VBA. mais j'ai bien l'impression que celui de VB.net lui ressemble beaucoup.

    Tu peux également jeter un œil sur Application.Exit. Il a l'air moins brutal.

  3. #3
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    End est un héritage du BASIC d'origine et a été maintenu pour des raisons de compatibilité.
    Bonjour,

    Effectivement, je vais supprimer l'espace de nom VisualBasic ce sera nettement mieux

    Citation Envoyé par clementmarcotte Voir le message
    Tu peux également jeter un œil sur Application.Exit. Il a l'air moins brutal.
    J'avais essayé Application.Exit mais ça ne fonctionne pas ; la raison est expliquée dans le lien que tu m'as donné :

    This method does not necessarily force the application to exit.

    Bref, comment quitter une application normalement et proprement ? Encore une chose simple compliquée à faire

    Pourtant, comme en C#, dans VB.NET il y a un ramasse miettes donc ça devrait être facile

    Comme je l'ai dit, mon application a plusieurs fenêtres, dont une est la fenêtre de démarrage. Mais, exception faite des boîtes de dialogues, il n'y a qu'une fenêtre affichée à la fois. Dans mon application, pour passer d'une étape à une autre, une fenêtre est fermée (plus exactement cachée avec la méthode .Hide) et une autre est ouverte.

    Dans le code de fermeture de mes fenêtres (exception faite des boîtes de dialogues), il y a un code qui demande à l'utilisateur de confirmer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub FrmEtape5_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            If Quitter() Then
                End ' Application.Exit()
            Else
                e.Cancel = True
            End If
        End Sub
        Public Function Quitter() As Boolean
            Return FrmMsgBox.Montrer(Msg_VoulezVousQuitter, MsgBoxStyle.YesNo) = MsgBoxResult.Yes
        End Function
    Si pour quitter proprement une appli il faut fermer toutes les fenêtres en mémoire (même celles non affichées) alors je crains une boucle infinie.

    Dans les propriétés de l'application le mode d'arrêt est "à la fermeture du dernier formulaire" ; faudrait-il donc que je remplace simplement End par Me.Hide ???

    A bientôt

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Hide ne ferme pas le formulaire, il ne fait que le cacher et ne ferme pas l'application. Il est conservé en mémoire

    Close ferme le formulaire, et le décharge de la mémoire. C'est le seul moyen d'arrêter un programme par la fermeture du formulaire.

    P.S. As-tu vraiment besoin de plusieurs feuilles ? Une seule Form avec un TabControl ne suffirait pas ?

  5. #5
    Membre chevronné Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 999
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Hide ne ferme pas le formulaire, il ne fait que le cacher et ne ferme pas l'application. Il est conservé en mémoire

    Close ferme le formulaire, et ;e décharge de la mémoire. C'est le seul moyen d'arrêter un programme par la fermeture du formulaire.
    Bonjour,

    j'ai testé ce code, il fonctionne mais je le trouve très sale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub FrmEtape5_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            If Quitter() Then
                Dim f As Form
                For Each f In My.Application.OpenForms
                    If Not (f Is Me) Then f.Close()
                Next
                Me.Close()
                'End ' Application.Exit()
            Else
                e.Cancel = True
            End If
        End Sub
    A bientôt

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Je viens d'ajouter deux questions à ma réponse.

    Mais si tu choisis d'arrêter le programme à la fermeture de toutes les formes, tu peux fermer (Close) tes forms en sortant. Tant que tu ne fais pas le Close de la dernière, tu n'as rien à craindre.

    Ou bien, tu transformes ton projet en application MDI. Ta MDIForm devient ton formulaire de démarrage. Avec l'option d'arrêter à la fermeture du formulaire de démarrage, tu peux fermer toutes les autres Forms (des MDIChildForms) sans fermer l'application.

Discussions similaires

  1. Bug bizarre avec jquery
    Par erehcab dans le forum jQuery
    Réponses: 7
    Dernier message: 22/04/2009, 22h28
  2. [Qt4] Bug bizarre avec QTableWidget
    Par Michaël dans le forum Qt
    Réponses: 12
    Dernier message: 26/04/2007, 16h48

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