Problème de Timer avec l'exécution d'action(s)

[Résolu]
Signaler
Messages postés
18
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
5 mars 2013
-
Messages postés
18
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
5 mars 2013
-
Bonjour, mon problème est le suivant :

Je voulais faire un programme qui permettrait de faire une ou plusieurs action(s) prédéfini, or quand je veux effectuer une action, il me l'exécute 32 fois. Je pense que cela est lié à mon Timer me servant à séparer chaque action par un temps prédéfinis.

Si quelqu'un pouvait me dépanner, cela m'aiderais beaucoup.

Merci de m'aider.

Extrait du code :


 Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click 
TextBox1.Enabled = False 'verouille les composants du form 
TextBox2.Enabled = False 
ComboBox1.Enabled = False 
NumericUpDown1.Enabled = False 
Button1.Enabled = False 
Button2.Enabled = False 
Button3.Enabled = False 
Button4.Enabled = False 
Button5.Enabled = False 

Me.Hide() 'rend la fenetre invisible 

LectureAction.Start() 'execution des actions 

TextBox1.Enabled = True 'déverouille les composants du form 
TextBox2.Enabled = True 
ComboBox1.Enabled = True 
NumericUpDown1.Enabled = True 
Button1.Enabled = True 
Button2.Enabled = True 
Button3.Enabled = True 
Button4.Enabled = True 
Button5.Enabled = True 
End Sub 

Private Sub InterprétationLecture() 
Try 
TextBox3.Select(0, 0) 
TextBox4.Select(0, 0) 
TextBox5.Select(0, 0) 
TextBox6.Select(0, 0) 
TextBox7.Select(0, 0) 
For Each Contenuligne3 As String In TextBox3.Lines 'Contenuligne = au texte d'une ligne. 
For Each Contenuligne4 As String In TextBox4.Lines 
For Each Contenuligne5 As String In TextBox5.Lines 
For Each Contenuligne6 As String In TextBox6.Lines 
For Each Contenuligne7 As String In TextBox7.Lines 
If Not Contenuligne3 = Nothing Then 'Si la ligne n'est pas vide alors, 
If Not Contenuligne6 = Nothing Then 
If Not Contenuligne7 = Nothing Then 



Dim LigneMax, DernièreLigne 
DernièreLigne = Split(TextBox7.Text, vbNewLine, , vbTextCompare) 
LigneMax = DernièreLigne(UBound(DernièreLigne) - 1) 



If Not Contenuligne4 = Nothing Then 'Si la ligne n'est pas vide alors, 
If Not Contenuligne5 = Nothing Then 
If Contenuligne3 "Clique gauche" Then 'si contenuligne3 "Clique gauche" alors 
Dim x As Integer, y As Integer 'le clique 
x = CLng(Contenuligne4) 
y = CLng(Contenuligne5) 
Call SetCursorPos(x, y) 
Call apimouse_event(mouseeventf_leftdown, 0, 0, 0, 0) 
Call apimouse_event(mouseeventf_leftup, 0, 0, 0, 0) 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Clique droit" Then 
Dim x As Integer, y As Integer 'le clique 
x = CLng(Contenuligne4) 
y = CLng(Contenuligne5) 
Call SetCursorPos(x, y) 
Call apimouse_event(mouseeventf_rightdown, 0, 0, 0, 0) 
Call apimouse_event(mouseeventf_rightup, 0, 0, 0, 0) 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 
End If 
End If 

If Contenuligne3 = "Entrée" Then 
SendKeys.Send("{ENTER}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Retour" Then 
SendKeys.Send("{BackSpace}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Flèche haut" Then 
SendKeys.Send("{UP}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Flèche bas" Then 
SendKeys.Send("{DOWN}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Flèche gauche" Then 
SendKeys.Send("{RIGHT}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 

If Contenuligne3 = "Flèche droite" Then 
SendKeys.Send("{Left}") 
LectureAction.Interval = Contenuligne7 
If TextBox7.Lines.Count < LigneMax Then 
LectureAction.Start() 
End If 
End If 
End If 
End If 
End If 

Next Contenuligne7 
Next Contenuligne6 
Next Contenuligne5 
Next Contenuligne4 
Next Contenuligne3 

Catch ex As Exception 
End Try 
End Sub 

Private Sub LectureAction_Tick(sender As System.Object, e As System.EventArgs) Handles LectureAction.Tick 
LectureAction.Stop() 
InterprétationLecture() 
End Sub
 


Aperçu du design :




Lien de téléchargement du projet


Cordialement,
Nivek821

4 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

System.Threading.Thread.Sleep(...)

Sinon, mes remarques concernant le code en général restent valides et te faciliteront la tache en correction/débogage..

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Afin de faciliter la lecture de ton code :
- Indentes ton code.
- Nommes tes variables et tes contrôles de manière logique :
+ TxtColonneLignes est plus explicite que TextBox1
- Regardes aussi le contrôle TreeView
- Un peu plus de commentaire aiderait aussi.

Concernant le code :
Dim x As Integer, y As Integer 'le clique
x = CLng(Contenuligne4)
Clng convertit en Long, alors pourquoi extraire un Long pour le mettre dans un Integer ?

En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).

---------------------------------------------------------------------
[list =ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
18
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
5 mars 2013

Je vais reformuler ce que je voudrais mais en simplifiant le code.

Avec 1 bouton appelé "Button4" je voudrais que celui-ci me permette après chaque action de faire une pause avec une valeur prédéfinit.

Part exemple avec "Sleep" (m'expliquer par la même occasion comment sa marche).

If Contenuligne3 = "Flèche haut" Then 
   SendKeys.Send("{UP}") 
   LectureAction.Interval = Contenuligne7 
   If TextBox7.Lines.Count < LigneMax Then 
      LectureAction.Start() 
      Sleep(Contenuligne6) 'Contenuligne6 est le temps d'attente prédéfinit
   End If 
End If 
Messages postés
18
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
5 mars 2013

Merci sa marche.