pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 2010
-
24 juil. 2009 à 15:45
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
27 juil. 2009 à 11:39
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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 juil. 2009 à 17:18
çà 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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 juil. 2009 à 16:06
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
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 27 juil. 2009 à 11:19
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