Timer capricieux...

Signaler
Messages postés
9
Date d'inscription
dimanche 11 février 2018
Statut
Membre
Dernière intervention
17 février 2018
-
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 mai 2021
-
Bonsoir (ou bonjour c'est selon...),

Après insertion d'un Timer dans ma fenêtre Design, je voudrais faire en sorte que :

Timer1.Interval = TrackBar1.Value

Le problème, c'est que ce code ne marche pas, il y aurait eu une erreur avec la valeur 0, pourtant impossible...
Je vous laisse le code source en dessous, merci d'avance à tous ceux qui prendront le temps de m'aider ;)

 Public Class Form

    Private Sub TrackBar_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar.Scroll
        If TrackBar.Value = 0 Or 1 Then
            TrackBar.Value = 1
            Timer1.Interval = 1
        End If
        Timer1.Interval = TrackBar.Value / 2
        Label3.Text = TrackBar.Value & " ms"
    End Sub

    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        TextBox1.Clear()
        TextBox1.Focus()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If Label5.Visible = True Then
            Label5.Visible = False
        Else
            Label5.Visible = True
        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Start()
    End Sub
End Class 

4 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
En VB.NET pensez à activer "Option Explicit" et "Option Strict"

If TrackBar.Value = 0 Or 1 Then

Si TrackBar.Value = 0 OU VRAI Alors
C'est ce que tu as écris.

Et si Interval vaut 0, cela désactive juste le Timer, pas d'erreur.
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 mai 2021
540
Bonsoir
je voudrais faire en sorte que :

Timer1.Interval = TrackBar1.Value



Mais dans ton code, quand ça plante.
Timer1.Interval = TrackBar.Value / 2

Je parie (car tu n’as pas précisé ce que vaut TrackBar.Value à ce moment-là) je parie donc, que TrackBar.Value vaut 1.
1/2 = 0.5 casté en Integer (Interval est souvent un Integer selon le type de timer) ça fait 0.

Si mon pari est juste, alors ceci corrigera ton problème.
If TrackBar.Value = 0 Or 1 Then
            TrackBar.Value = 1
            Timer1.Interval = 1
        Else
        Timer1.Interval = TrackBar.Value / 2
End IF

Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 mai 2021
540
Hier soir je n’avais pas intégré la remarque (fort judicieuse) de NHenry.
If TrackBar.Value = 0 Or  TrackBar.Value = 1 Then
            TrackBar.Value = 1
            Timer1.Interval = 1
        Else
        Timer1.Interval = TrackBar.Value / 2
End IF

Ou plus simplement
If TrackBar.Value < 2 Then
            TrackBar.Value = 1
            Timer1.Interval = 1
        Else
        Timer1.Interval = TrackBar.Value / 2
End IF
Messages postés
9
Date d'inscription
dimanche 11 février 2018
Statut
Membre
Dernière intervention
17 février 2018

OK merci beaucoup pour votre aide je n'avais pas pensé au fait que le
Timer1.Value
était en Integer... ce qui évidemment pose quelques soucis.
Messages postés
15921
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 mai 2021
540
Si cela te convient, pense à marquer le sujet résolu.
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#marquer-un-sujet-resolu

Ps: c’est trakbar.value et timer1.interval
Ps2: selon le type de timer, interval est parfois un timespan