Timer Visual Basic Probleme

Fermé
AttemptToEvade Messages postés 1 Date d'inscription samedi 4 février 2012 Statut Membre Dernière intervention 4 février 2012 - 4 févr. 2012 à 21:25
 le père - 5 févr. 2012 à 00:37
Bonjour,
Je suis débutant dans le language de programmation Visual Basic. Je lis les cours du site du zéro et j'ai eu l'idée suite à un TP de faire un programme.

Une ComboBox me permet de choisir un nombre, j'ai une variable déclarée à zéro qui s'incrémente à chaque tick du timer (reglé à 1000 millisecondes) et quand cette variable atteint le nombre de la combox Box le timer s'arrête et le programme émet un Beep (comme un genre de minuteur).

Voila jusqu'ici tout allait bien j'ai créer mes événement etc... Ma valeur s'incrémente bien à chaque tick du timer cependant j'ai besoin de votre aide : comment puis-je faire un événement qui se déclenche au moment ou ma variable est égale à la valeur proposée par la ComboBox ? J'ai tenté de faire une boucle Do Loop Until blablabla qui tourne sans fin jusqu'a ce que ma variable sois égale à la variable du ComboBox. (je vous mettrai ma tentative ratée en gras dans mon code que je vous Copie juste là :)

Public Class Form1

Private Property Decompte As Integer = 0


Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

TIMER_1.Interval = 1000
LBL_TPS.Text = "Temps"

End Sub

Private Sub BT_START_Click(sender As System.Object, e As System.EventArgs) Handles BT_START.Click

Decompte = CB_1.SelectedValue
TIMER_1.Enabled = True

Do

Loop Until Decompte = CB_1.SelectedValue
Console.Beep()

End Sub

Private Sub BT_STOP_Click(sender As System.Object, e As System.EventArgs) Handles BT_STOP.Click

TIMER_1.Enabled = False

End Sub

Private Sub TIMER_1_Tick(sender As System.Object, e As System.EventArgs) Handles TIMER_1.Tick

Decompte = Decompte + 1

LBL_TPS.Text = Decompte

End Sub

End Class



A voir également:

1 réponse

Bonjour

Il faut absolument éviter ce genre de boucle, il bloque le traitement des événements. Et comme ici c'est un autre événement (le top du timer) qui fait changer ta variable Decompte, cette variable ne peut plus évoluer.

Il y a bien un moyen pour pour autoriser les événements pendant une boucle, mais il est tellement dangereux (réentrance incontrôlée) que je ne te dis pas lequel.

Mais ton problème se résoud très simplement en faisant ton test dans TIMER_1_Tick :
if Decompte = CB_1.SelectedValue then
  Console.Beep() 
  TIMER_1.Enabled=false
end if
0