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 :

timer avec variable globale et locale [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut timer avec variable globale et locale
    Bonjour.
    Je crois que je n'ai pas bien assimilé la notion de variable globale:

    je cherche a faire bouger le panel: ce code marche:
    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
    Public Class Form1
        Dim x As Integer = 0
        'Dim p As New Point(x, x)
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Timer1.Enabled = True
        End Sub
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Timer1.Interval = 50
            x += 5
            Dim p As New Point(x, x)
            Me.Panel1.Location = p
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim p As New Point(x, x)
            Me.Panel1.Location = p
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.Timer1.Enabled = False
        End Sub
    End Class
    mais ce code ne marche pas:
    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
    Public Class Form1
        Dim x As Integer = 0
        Dim p As New Point(x, x)
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Timer1.Enabled = True
        End Sub
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Timer1.Interval = 50
            x += 5
            'Dim p As New Point(x, x)
            Me.Panel1.Location = p
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Dim p As New Point(x, x)
            Me.Panel1.Location = p
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.Timer1.Enabled = False
        End Sub
    End Class
    Merci
    J'apprends la programmation pour le plaisir

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bojour,

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim p As New Point(x, x)
        ' ...
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Timer1.Interval = 50
            x += 5 ' on augmente x, mais il ne sera jamais affecté à un nouveau point
            'Dim p As New Point(x, x)
            Me.Panel1.Location = p ' p vaut la valeur de l'initialisation (0,0)
        End Sub
    p est créé une fois pour toutes avec une valeur et n'est plus jamais modifié.

    Pour fonctionner, il faut à chaque fois recréer un nouveau point que l'on attribut à p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim p As Point
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            x += 5
            p = New Point(x, x) ' ici un nouveau point est créé avec la valeur de x qui a augmenté
            Me.Panel1.Location = p
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Timer1.Interval = 50
            p = New Point(x, x)
            Me.Panel1.Location = p
        End Sub
    Autant initialiser l'intervale du timer dans le load, ou éventuellement dans le clic du bouton si on veut le changer.

    Pour info, tu peux affecter directement les valeurs de point sans passer par une variable intermédiaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            x += 5
            Me.Panel1.Location = New Point(x, x)
        End Sub
    Ainsi il y a moins de risque d'erreur.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci pour votre explication. et si j'ai bien compris, une variable de type basique (integer par exemple) déclarée globale peut changer après, mais une variable de type objet non et ne peut changer que via "objet.attribut" (dans notre cas p.X et p.Y)
    Si ça peut aider certains novices comme moi, voilà une petite démonstration:

    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
    Public Class Form1
        Dim x As Integer = 10
        Dim p1 As New Point(x, x)
        Dim p2 As New Point(x, x)
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            x += 15
            p2.X = x
            p2.Y = x
            Me.Label1.Text = p1.X.ToString
            Me.Label2.Text = p1.Y.ToString
            Me.Label3.Text = p2.X.ToString
            Me.Label4.Text = p2.Y.ToString
            Me.Label5.Text = x.ToString
        End Sub
    End Class
    Merci
    J'apprends la programmation pour le plaisir

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par stracoma Voir le message
    Merci pour votre explication. et si j'ai bien compris, une variable de type basique (integer par exemple) déclarée globale peut changer après, mais une variable de type objet non et ne peut changer que via "objet.attribut" (dans notre cas p.X et p.Y)
    Une variable de type objet peut changer p = New Point(x, x) ' ici un nouveau point est créé p contient un nouvel objet ou l'on met à jour les propriétés avec les paramètres du constructeur.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Ok.
    Une idée de plus.
    Merci
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. problème avec variables globales
    Par johnburton54 dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/06/2007, 09h20
  2. variables globales ou locales
    Par exhortae dans le forum C
    Réponses: 6
    Dernier message: 09/04/2007, 01h29
  3. Réponses: 4
    Dernier message: 04/02/2007, 19h39
  4. variable globale ou locale pour CurrentDB
    Par jibouze dans le forum VBA Access
    Réponses: 7
    Dernier message: 30/05/2006, 17h15
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

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