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 :

Sortir d'une boucle a la fermeture de la form


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut Sortir d'une boucle a la fermeture de la form
    Bonsoir, je vous explique mon soucis,

    voila j'ai un son qui se déclenche 500 fois dans une boucle for à l'aide de ma procédure 'synthetise_depart' à l'ouverture de ma fenêtre, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For index As Integer = 1 To 500 'on part pour 500 lecture sonore
                    If lecture_son = True Then
                        synthetise_depart("Attention : Un véhicule à pénétré dans l'établissement sans lecture plaque !")
                    Else
                        Exit For
                    End If
                Next
    Mon soucis est que je souhaite arrêter la lecture du son, donc sortir de ma boucle lorsque je ferme ma fenêtre, en cliquant sur un bouton 'fermer' dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     lecture_son = False 'on arrete la lecture du son en boucle
            Me.Close()
    comme vous le constaté j'ai intégré un booléen 'lecture_son' qui passe a false lorsque l'on ferme la fenêtre, et qui devrait me faire sortir de la boucle de lecture mais ça ne fonctionne pas, la fonction synthetise_depart est toujours exécuté ! je me demande ou est le probléme !

  2. #2
    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,

    Ton Exit For est mal positionné tout simplement !!

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    J'ai essayé ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     For index As Integer = 1 To 500 'on part pour 500 lecture
                    If lecture_son = False Then
                        Exit For
                    Else
                        synthetise_depart("Attention : Un véhicule à pénétré dans l'établissement sans lecture plaque !")
                    End If
                Next
    mais sa ne fonctionne toujours pas, même lorsque je ferme ma fenêtré la procédure continue à s’exécuter !

  4. #4
    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
    Et si tu mettais le code complet histoire de voir ce qui cloche dans la globalité... ou alors tu mets un point d'arrêt sur la ligne suivante et tu regardes quelle valeur prends ta variable lors du debogage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          If lecture_son = False Then

    A+

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    oui voici le code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public Class depart
     
        Sub New(ByVal operation As Integer, ByVal vehicules As String, ByVal natures As String, ByVal natures2 As String, ByVal adresses As String, ByVal dates As String, ByVal heures As String)
            'oblige la creation d'une fenetre pour chaque nouveau depart
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
    For index As Integer = 1 To 500 'on part pour 500 lecture
                    If lecture_son = False Then
                        Exit For
                    Else
                        synthetise_depart("Attention : Un véhicule à pénétré dans l'établissement sans lecture plaque !")
                    End If
                Next
    End Sub
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            lecture_son = False 'on arrete la lecture du son en boucle
            Me.Dispose()
            Me.Close()
        End Sub
     
    End Class
    et voici aussi dans un module le code de 'synthetise_depart' qui n'effectue que la lecture vocale du texte passé en paramètre de la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    Module vocalise
     
        Public parole As SpeechSynthesizer = New SpeechSynthesizer
     
    Public Sub synthetise_depart(ByVal libelle As String)
     '================================================================
            'Debut de l'annonce sonore
            '================================================================
            parole.SelectVoice("Microsoft Hortense Desktop") 'voir si la voix est installé sur le pc
            parole.SpeakAsync(libelle)
     
    End Sub
     
    End Module

    et a l'ouverture de mon application je passe lecture_son a true
    Merci

  6. #6
    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
    Chez moi ça fonctionne très bien en placant le code de ton module pour jouer le son dans la boucle directement ...o_O

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    mais chez moi lorsque je ferme ma fenêtre, la boucle ne s’arrête pas et le son continue à jouer, en boucle.

    Peu être parce que j'ouvre ma fenêtre depart de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim affichage As depart = New depart(numero_op, vehicule_op.ToString, nature_op.ToString, nature_dessous.ToString, adresse_op.ToString, date_op.ToString, heure_op.ToString)
            affichage.Show()
    et non de cette facon
    toi c'est ce que tu a fait ?

  8. #8
    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
    Non ! Comme je te disais j'ai déplacé le code de ton module qui appelle la méthode SpeechAsync du coup au niveau global tu initialises l'instance Parole.

    Ensuite il suffit juste d'appeler la méthode : parole.SpeakAsyncCancelAll()

    Et ta variable lecture_Son est inutile !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Imports System.Speech.Synthesis
     
    Public Class Depart
     
        Private parole As SpeechSynthesizer = New SpeechSynthesizer
     
        Sub New()
     
            InitializeComponent()
     
            For index As Integer = 1 To 500 'on part pour 500 lecture
                parole.SelectVoice("Microsoft Hortense Desktop") 'voir si la voix est installé sur le pc
                parole.SpeakAsync("Attention : Un véhicule à pénétré dans l'établissement sans lecture plaque !")
            Next
     
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Close()
        End Sub
     
     
        Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
            parole.SpeakAsyncCancelAll()
        End Sub
     
    End Class
    Un truc dans le genre et pourquoi pas Disposer l'objet parole ensuite.

    NB1 : lorsque tu utilises une classe il ne faut pas hésiter à regarder les méthodes qu'elle propose
    NB2 : Je place la méthode parole.SpeakAsyncCancelAll() dans les gestionnaire close de manière à ce que si tu cliques sur le bouton traditionnel de fermeture de formulaire que l'annulation du son soit effective !

    A+

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ok je te remercie pour ton aide, effectivement j'aurais pu regarder plus en détail les méthodes de la classe Speech
    Encore merci

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

Discussions similaires

  1. Sortir d'une boucle for
    Par gids01 dans le forum Langage
    Réponses: 9
    Dernier message: 14/11/2006, 15h06
  2. Sortir d'une boucle de parcour d'un Recordset
    Par Mariboo dans le forum IHM
    Réponses: 2
    Dernier message: 12/06/2006, 18h07
  3. Sortir d'une boucle en fonction d'une durée
    Par BECHE dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h08
  4. [DEBUTANT] sortir d'une boucle avec un touche particulière
    Par thibouille dans le forum Débuter
    Réponses: 4
    Dernier message: 25/10/2005, 06h44
  5. SORTIR D'UNE BOUCLE
    Par chekibperl dans le forum Langage
    Réponses: 2
    Dernier message: 22/10/2005, 12h48

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