Timer Visual Basic Probleme
AttemptToEvade
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
le père -
le père -
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
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:
- Timer Visual Basic Probleme
- Visual basic - Télécharger - Langages
- Visual basic editor - Télécharger - Langages
- Visual petanque - Télécharger - Sport
- Microsoft 365 basic - Accueil - Microsoft Office
- Visual c++ 2019 - Guide
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 :
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