Problemes Enchainements Evenement VB6

Résolu
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour,
Je rencontre un souci un peu particulier sous VB 6 (Je sais, cet un vieil environnement mais je n'y peux rien... On a un gros produit développé dans cette techno et la migration vers .Net n'est pas prévue pour tout de suite)

Bref, je m'explique.. Je suis en VB6 Sp6
Pour illustrer mon pb, je pars de l'exemple ci dessous :

J'une appli avec 2 fenetres standards
La premiere fenetre contient 2 textbox et un bouton
Le code de la premiere fenetre est le suivant :

Private Sub Close_Click()
Unload Me
End Sub

Private Sub txt1_Validate(Cancel As Boolean)
Form2.Show vbModal
End Sub

La seconde fenetre ne contient qu'un bouton permettant de la fermer.
Le code de la seconde fenetre est le suivant :
Private Sub Close_Click()
Unload Me
End Sub

Comme vous pouvez le constater, rien de plus simple.
Sur le Validate de mon text box 1, je déclenche l'affichage Modal de la fenetre 2.
A l'exécution, mon curseur est dans le Text Box1.
Je clic sur le text box 2 pour me positionner dedans.
A ce moment, en toute logique, ma fenetre 2 apparait.
Je clic sur le bouton pour la fermer et revenir sur la fenetre 1
Mon curseur Clignote dans le text box 2... Ce qui est normal car c'est ce que je voulais faire
Par contre, mon pb c'est qu'il m'est impossible de saisir quoique ce soit.
Je suis obligé de recliquer à nouveau dans le text box 2 pour permettre la saisie.
Pourtant, mon controle TextBox 2 etait le controle actif de la fenetre (propriété ActiveControl)
il n'était pas locker ni désactiver...

Quelqu'un a t il une idée ?
Il Semble que cela soit un pb de gestion des évènements de VB mais que faire pour corriger cela ?
En espérant avoir ete clair

Toutes les idées sont les bienvenues
Merci d'avance

Pat

 Don't Worry , Be Happy

lorsque le problème est résolu, pensez Réponse Acceptée

6 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
çà serait de la bidouille sur du "pas logique"

qu'est-ce que tu pourrais faire.. forcer le mouseup? (api mouse_event)
ouai mais lequel, gauche? droit? milieu? tous "au cas où"?
et ci c'est la touche tabulation...

il faut revoir ton usage réel, désolé

ou au pire (aussi laid que le reste) :
pose un timer à 10ms à false
au validate tu passes à true
et dans le timer
[b]timer1.enabled = false
form2.show vbmodal/b

ce décalage de 10ms laissera le temps de sortir du _validate avec la souris en bon état

mais je reste sur ma première réponse : c'est le code qu'il faut revoir, cette solution est un palliatif qui devrait fonctionner mais est tout sauf de la prog

[hr]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
ton validate a été généré par le mouse_down dans la box2
hors tu interromps la suite des évènements form1 en passant la form2 en modal

au final, quand la form2 est fermée, le curseur est bien dans la box2 mais form1 a (croit avoir) toujours le bouton de souris enfoncé
preuve en est :
click sur le bouton close de fom1 =>
form2 va s'ouvrir, et à la fermeture, form1 ne se décharge pas.
si tu survoles le bouton de form1 tu verras même l'effet de down/over (selon ta version de windows)

ta méthode d'ouverture est donc mal choisie
peut-être jouer avec lostfocus
(fonctionne mais tu auras un problème en cas de click sur le close de form1 si txt1 ne perd jamais le focus, il faudrait alors jouer avec un boolean)


ps : close est un mot réservé, mauvais idée comme nom de contrôle

++

[hr]
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
Merci pour ta réponse....

effectivement, le nom de "close" pour les ctrls n'étaient pas judicieux...

bref, je me doutais bien de l'interruption de l'enchainement des évènements mais j'aurais bien aimé que VB continue après l'interruption.

ne vois tu pas d'autre solution que le lost Focus... car dans mon cas, j'ai besoin du validate.

merci de ta réponse en tout cas

Pat

 Don't Worry , Be Happy

lorsque le problème est résolu, pensez Réponse Acceptée
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
merci pour tes conseils

on va voir pour réorganiser le code afin de gérer au mieux

cordialement

Pat

 Don't Worry , Be Happy

lorsque le problème est résolu, pensez Réponse Acceptée
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
Salut,
j'ai continué mes investigations et je me suis apercu du phénomène suivant :
j'ai activer l'évenement DblClick de Form2 auquel j'ai mis le code de
fermeture de la fenetre
Private Sub Form_DblClick()
Unload Me
End Sub
lorsque mon form2 est affiché en modal et que je fais un dblClick dessus, la fenetre se ferme et j'arrive sur le txt2
dans ce cas, je ne rencontre aucun souci, la saisie est possible dans txt2

J'ai tracé les évènements qui se déclenchent en utilisant la fermeture de Form2 par le bouton
Txt1 Validate 11:17:05
txt1 lostfocus 11:17:05
Txt2 Form2cmdclose Click 11:17:07
Txt2 MouseDown 11:17:07
txt1 lostfocus 11:17:07
Txt2 GotFocus 11:17:07

On remarque qu'il n'y a pas d'évènement MouseUp sur Txt2
J'ai tracé les évènements en utilisant le DblClick sur Form2
Txt1 Validate 11:19:18
txt1 lostfocus 11:19:18
Form2 DblClick 11:19:20
Txt2 MouseDown 11:19:20
txt1 lostfocus 11:19:20
Txt2 GotFocus 11:19:20
Txt2 MouseUp 11:19:20
La on a bien un MouseUp sur Txt2

Il semble que dans le premier cas, l'évenement MouseUp soit passé à la trape ?!

Aurais tu des explications ?

cordialement

Pat

 Don't Worry , Be Happy

lorsque le problème est résolu, pensez Réponse Acceptée
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
l'explication je l'ai déjà donnée ^^, concernant le "pas de mouseup"
ton modal arrive avant = > fin de réception

et pour le doubleclick, ce n'est pas 2 clicks
il n'y a pas deux mousedown lors du double click et le up arrive après

click simple =>
Form_MouseDown (41951,98)
Form_MouseUp (41952,05)
Form_Click (41952,05)


click double =>
Form_MouseDown (41954,27)
Form_MouseUp (41954,3)
Form_Click (41954,3)
Form_DblClick (41954,38)
Form_MouseUp (41954,42)


tu fermes avant le UP, en modal, la première le récupère

++