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 :

insérer un timer dans mon projet [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut insérer un timer dans mon projet
    Bonjour !

    Depuis quelques temps, j'essaye d’insérer un timer dans mon projet qui aurait pour but de fermer une fenêtre et d'en ouvrir une autre au bout de 15 secondes. J'ai essayé avec des boucles, des conditions structurelles, des déclarations de variables et ça marche ! Voici mon code :

    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
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles time_passage.Tick
            Dim temps As Integer = 0
            Dim temps_validation = 1500
            Dim validation_temporel As Boolean = False
     
            Do
                If temps <> temps_validation Then
                    temps = time_passage.Interval + 0.001
                End If
     
            Loop While validation_temporel = True
     
            time_passage.Enabled = False
            Me.Visible = False
            ecran1.Show()
     
    End sub
    Désole je n'ai pas mis de commentaire... Donc ma fenêtre reste afficher 2 secondes voir moins ! L'interval des propriétés est à 100.

    Alors, ais-je un problème de math ou d'informatique ou les deux ?

    J'avoue, les timers sont un peu ma bête noire mais au moins j'aurais essayé ! ! !

    Merci d'avance !

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour, les timers ne fonctionnent effectivement pas du tout comme tu le penses.

    * Un timer est fait pour appeler à intervalle régulier une certains action. La propriété Interval ne désigne pas le temps passé mais la période entre deux appels. Autre point important, le thread sur lequel le code est exécuté : les timers UI (System.Windows.Form.Timer et DipatcherTimer) exécutent leurs actions sur le thread UI, bloquant celui-ci l'exécution de cette action, en opposition avec System.Threading.Timer qui exécute les appels sur la ThreadPool.
    * Un chronomètre (Stopwatch) sert à mesurer le temps écoulé depuis son démarrage.

    Exemples d'implémentations pour ce que tu veux faire :
    * Un timer scanne toutes les secondes le temps passé depuis le démarrage (via un stopwatch). Si t > 15s, une fenêtre est ouverte et le timer arrêté, sinon on quitte la fonction, qui sera rappelée à nouveau dans une seconde.
    * Un timer est programmé pour exécuter une action toutes les 15s. Au premier appel on ouvre une nouvelle fenêtre et on arrête le timer.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut
    Alors euh... J'ai essayé de comprendre ! loool J'ai un peu de mal avec les "ThreadPool" et les UI

    Bon, j'ai donc changer... Sans succès ! J'ai voulu utiliser stopwatch mais évidemment, pour la condition, stopwatch n'est pas du même type et n'est pas convertible !

    Donc voici ce que j'ai fait et évidemment... ça ne fonctionne pas ! Mais je comprendrais un jour ! Maintenant, il reste toujours sur le même écran !

    je crois que je vais utiliser une progressbar pour voir réellement ce qu'il fait ! Bref ! voici mon nouveau code (faux pour ceux qui suivent! )


    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
     Dim temps As Short = 0
            Dim temps_valid As Short = 15
     
            'Donc, selon l'interval définit dans les propriètés, toutes les 1000 millisecondes, le temps prend une valeur de +1
            temps = temps + 1
     
     
            'Donc si le temps est égale au temps valide alors instruction ci-dessous
            If temps = temps_valid Then
                Me.time_passage.Enabled = False
                Me.Close()
                ecran1.Show()
     
     
            End If
    End sub

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Si ton code est bien associé à l'événement Tick du timer, il n'y a que deux choses qui coincent:
    * La variable temps devrait être un membre de la classe. Ici, elle est réinitialisée à zéro à chaque appel, donc ta condition ne se produit jamais.
    * Si tu fermes la première fenêtre avant d'en ouvrir une autre, y a t-il toujours une fenêtre parent commune ouverte ? Car si tu tentes de fermer la fenêtre racine, tu fermes ton appli (Application.Run se termine).

    A part ça, le stopwatch ne se substitue pas au timer, ce n'est pas un objet qui exécute quoi que ce soit. C'est simplement un objet qui expose une propriété Elapsed (TimeSpan) qui donne le temps écoulé depuis l'appel à Stopwatch.Start(). On peut l'utiliser en association avec un timer même si cela fait double emploi (voir mon précédent message : la second solution est moins bancale, la première n'était donnée que parce qu'elle ressemblait à ce que tu tentais de faire, un exemple pédagogique apparemment peu compréhensible). Dans ton exemple il remplacerait la variable temps.

    Maintenant une solution simple:
    * Un timer avec un intervalle de 15s. N'oublie pas de le démarrer.
    * Lors du tick, on ferme la première fenêtre et on en ouvre une autre. Puis on arrête le timer.
    * Place des breakpoints (F9) en cas de problème.

    Si ta première fenêtre était la fenêtre racine, le plus simple est de la remplacer par une fenêtre invisible et de faire de ta précédente fenêtre racine une enfant de la nouvelle.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut
    Merci beaucoup ! ! ! Ca fonctionne ! ! !

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Public Class presentation
        Dim temps As Short = 0
     
        Private Sub presentation_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            time_passage.Enabled = True
     
        End Sub
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles time_passage.Tick
     
     
            Dim temps_valid As Short = 15
     
            'Donc, selon l'interval définit dans les propriètés, toutes les 1000 millisecondes, le temps prend une valeur de +1
            temps = temps + 15
     
     
            'Donc si le temps est égale au temps valide alors instruction ci-dessous
            If temps = temps_valid Then
     
     
                ecran1.Show()
                Me.Close()
                Me.time_passage.Enabled = False
     
     
            End If
     
     
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Me.Visible = False
            ecran1.Show()
     
        End Sub
    End Class



    En tout cas merci pour tout ! Ca fonctionne à la perfection ! ! !

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

Discussions similaires

  1. comment insérer une image dans mon .pas
    Par korntex5 dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 11h54
  2. [D7] Ressource dupliquée dans mon projet
    Par dleu dans le forum EDI
    Réponses: 2
    Dernier message: 27/02/2006, 15h52
  3. [PHP-JS] Comment insérer du javascript dans mon php
    Par tioseb dans le forum Langage
    Réponses: 1
    Dernier message: 16/02/2006, 17h04
  4. insérer une dll dans un projet
    Par Biosox dans le forum MFC
    Réponses: 3
    Dernier message: 24/01/2006, 10h41
  5. [FLASH MX] Incorporer un swf dans mon projet
    Par Toutouffe dans le forum Flash
    Réponses: 2
    Dernier message: 19/01/2005, 12h04

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