Button2 dans Button1

Résolu
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009 - 18 mai 2007 à 17:08
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009 - 21 mai 2007 à 20:00
Bonjour,
Voila j'ai donc un button1 qui s'appelle "action" dans lequel je fais des actions (si c'est comme ca que ce s'appelle)
CODE vb 2005 :

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

Do
SendKeys.Send(TextBox1.Text)
Loop

Voila maintenant quand j'appuie sur le "Stop" = Buttom2 j'aimerai quel la boucle s'arrète :
CODE vb 2005 :

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

Do until Button2.click
SendKeys.Send(TextBox1.Text)
Loop

Mais voila il me dit que Button2.click bla bla bla est un évenement et donc ca va pas . Alors j'ai cherché un peu, le mot qui revenait le plus souvent était RaiseEvent mais bon sans plus.
Quelqu'un à une petite idée ?
Merci

13 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 mai 2007 à 17:30
Bonjour,


C'est facile à résoudre avec une booléenne


adapte ceci à VB.Net


Private couic As Boolean
Private Sub Command1_Click()
  Do While Not couic
   'ici ton instruction
   DoEvents ' attention : ce Doevents est important ici
 Loop
End Sub


Private Sub Command2_Click()
  couic = Not couic
End Sub
3
Big200148 Messages postés 149 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 23 juillet 2009
18 mai 2007 à 17:12
Le problème c'est que tu as une boucle continue. Donc tu ne pourras jamais clique sur ton bouton 2 car le code du 1 seras en execution constamment
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
18 mai 2007 à 17:21
ok j'ai compris mais mon code réèl est

PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Do
xWait(1000)
SendKeys.Send(TextBox1.Text)

Loop

Donc en faite je peux cliquer sur le button2 enfin j'ai essaye et j'ai pas eu de problème.
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
18 mai 2007 à 22:06
Merci ça fonctionne parfaitement :)
J'ai encore une petite question  :

Private

Declare
Function GetTickCount
Lib
"kernel32" ()
As
Long

'********************************************************************************************

' Name : xWait

' Purpose : Wait for the time requested without

' stopping the execution of other functions

' Syntax : xWait(MilsecToWait)

' Parameters : MilsecToWait : Time to wait in millisecond

' Return : /

'********************************************************************************************

Public
Sub xWait(
ByVal MilsecToWait
As
Long)

Dim lngEndingTime
As
LonglngEndingTime = GetTickCount() + (MilsecToWait)

Do
While GetTickCount() < lngEndingTime

My.Application.DoEvents()

Loop

End
Sub

Le problème est le suivant :
que je appelle
xWait(1000)
xWait(10000)
Il attend toujours que 250 ms
Quelqu un a-t-il une idée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 mai 2007 à 22:21
déjà (puisque tu es sous VB.Net et bien que je ne connaisse personnellement rien à VB.Net ) :
"Private Declare Function GetTickCount Lib"kernel32" () As Long
"
ce Long en rouge devrait être un Integer, il me semble ....
(Leçon mille fois donnée par Casy... non ?)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 mai 2007 à 22:26
et du coup, corriger bien évidemment la suite ici :

PublicSub  xWait (ByVal MilsecToWait AsLong)

Dim lngEndingTime AsLonglngEndingTime = GetTickCount() + (MilsecToWait)

Fais-vite sinon Casy va surement te tirer les oreilles depuis le Pays Basque
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
19 mai 2007 à 08:28
J'avais bien mis un espace dans mon script je ne sais pas pourquoi il l'a mis sans espace sans doute une érreur de copié collé...
Enfin aussi non tu me dis integer j'ai essayé c'est possible pour PublicSub  xWait (ByVal MilsecToWait As Integer)
Mais pas pour Dim lngEndingTime As Long car il est l addition de GetTickCount() + (MilsecToWait) et GetTickCount()  est un chiffre énorme quand j'ai essayé de voir ce que c'était. D'ailleur si je mets Dim lngEndingTime As Interger il me dit que ca va pas pcq le nbr est trop grand (enfin c'était ca l'idée)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mai 2007 à 09:12
Bon, là je ne sais pas (ne connais pas VB.Net...)

Mais montre-moi ce que contient
1) GetTickcount au départ
 2)  ce que contient lngendingtime avec une valeur d'attente de 1000 et avec une valeur d'attente de 10000
3) ce que contient GetTickcount() quand plus grand que  lngEndingTime

je vais essayer de comprendre....

Enfin : es-tu fraiment certain d'avoir, sous VB.Net à mettre tes parentèses à  GetTickcount () ?
Car, sous VB6, on ne les mettrait pas ...


Pour y voir clair : fais-moi également un msgbox de


lngEndingTime = GetTickCount + MilsecToWait ' (sans les parenthèses, donc... aucune)
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
19 mai 2007 à 20:39
1) Message box en affichant la valeur de GetTickcount  : 1408740767121017
 juste avant Dim lngEndingTime As Long
 mais il change à chaque démarrage.
3) Message box en affichant la valeur de GetTickcount  : 1409827393911561
 juste avant Do
While GetTickCount() < lngEndingTime il est différent de celui du dessus et change à chaque fois.
Message box en affichant la valeur de GetTickcount  : 1409827393921561
 juste avant My
.Application.DoEvents() il est différent de celui des 2 autres et change à chaque fois.
Tout ca avec xWait(10000)
2) La valeur de lngEndingTime juste avant
 lngEndingTime = GetTickCount() + (MilsecToWait) est égale à zéro (normal) .
2) La valeur de lngEndingTime juste après 
 lngEndingTime = GetTickCount() + (MilsecToWait) est égale à 1393991848548334 .
4) GetTickcount () sans () c'est à dire GetTickcount tout court ça ne change rien.
5) Sans les parenthèses à MilsecToWait sa donne rien non plus.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 mai 2007 à 21:22
Bonsoir,

Il est absolument normal que la valeur renviyée par la fonction GerTickCount change sans cesse et de façon croissante.

Il est par contre anormal que, pour deux mesures prises à la suite :
tu aies un lngEndingTime (= GetTickCount() + (MilsecToWait)) qui soit plust petit (1393991848548334) que le gettickcount lui-même (1409827393921561)
Pige pas, là !!! (à moins que tu aies mal pris tes mesures, c'est impossible)
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
19 mai 2007 à 22:42
Voila des nouvelles mesures plus cohérentes :
1534772294966841
1535266216325412
1535266216245412
tjrs pour xWait(10000)
Bon voila je suis perdu  je vais trouvé le chemin de mon lit
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
20 mai 2007 à 17:02
Bonjour,

Jette quand même un coup d'oeill là :
http://www.vbfrance.com/infomsg_JUSTE-POUR-DIMANCHE_945691.aspx
Ce serait fort si VB.Net n'arrivait pas à faire ce que VB6 peut faire...
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
21 mai 2007 à 20:00
Et bien et bien ,
j'ai lu tout ca j'ai rien compris ...
non  , si je comprend bien le faite que ma fonction attende d'office toujours 250ms c'est due à " même résolution de synchro de l'horloge donc AUCUNE précision à la milliseconde. "
Mais 250ms c'est pas un peu énorme comme imprécision ? Surtout que cet valeur va changé en fonction du pc alors ?
Enfin j'ai compris ce qu'est  GetTickCount. Et en y réfléchisant ca ne devrait pas être : 
If GetTickCount() > lngEndingTime  // avec suppérieur

My.Application.DoEvents()

End If

merci pour tout en tout cas :)
0
Rejoignez-nous