1 | |
Auteur | Messages |
---|---|
Foromus | #1 Posté le 18/2/2010 à 13:31:00 |
Bonjour, Donc, j'explique un cas concret : J'ai plusieurs Forms 0, 1, 2, 3, etc. et je les appelle toujours depuis la Form0, tout en sachant que je dois revenir à cette Form0 pour en appeler une autre. Je me suis dit que j'aillais gérer au mieux avec un truc comme : Public Sub Form0_Activate() En fait, ça marche un peu, mais mal. Premièrement, si je place dans cette procédure un Message.Info("Voir"), juste histoire de me renseigner, c'est refusé, le programme n'en veut pas ! Bon, c'est comme ça. Je me suis dit que j'aillais ruser, j'appelle alors une seconde procédure et dans laquelle je colle mon Message.Info("Voir"), en me disant que, en mettant une marche de plus, le programme allait n'en voir que du feu... Pas du tout, c'est refusé également. En clair, et à partir du moment où on repart depuis Activate, il n'y a plus moyen d'utiliser Message.Info.... Donc, là, je ne comprends pas tout.... Ensuite, je poursuis malgré tout, et je lance, depuis Form0, l'appel de la Form1 (par un bouton, donc, ça se passe bien). Le souci, c'est que dès l'appel de la Form1 - je quitte donc la Form0, la procédure Form0_Activate() est exécutée ! Que ça aurait été Form0_Deactivate, j'aurais à la rigueur compris, mais là, je ne vois pas. Si je continue - je suis maintenant sur ma Form1, je retourne, par un bouton, sur ma Form0, et là, la procédure Form0_Activate() est encore exécutée à nouveau. En clair, que je quitte ou retrouve la feuille, la procédure Form0_Activate() est exécutée. Et ce n'est pas du tout ce que je recherche, moi, ce que je veux, c'est qu'elle ne soit exécutée qu'une seule fois, seulement lorsque je reviens sur ma Form0, et surtout pas lorsque j'en sors !.. Je n'ai pas trouvé les explications sur événements, et en plus, beaucoup restent en anglais, ce qui ne me facilite pas la tâche... Bon, si quelqu'un peut me dire.... Merci ! Additif : Il est possible que cela s'explique par le fait que, quand je clique sur le bouton d'appel de mon autre form, je mobilise donc le focus sur ce bouton, et dès sa procédure achevée, il rend le focus à la form, ce qui expliquerait l'activate de début. Mais ce n'est qu'une supposition... La solution trouvée est assez simple. Je nomme deux variables dans ma Form0, MyVar1 et MyVar2, par exemple, et que je mets à égalité. Dans ma Form1, je modifie l'une (ou non), par exemple, et si je veux la modifier, je fais Form1.MyVar = x. Ainsi, quand je retourne dans ma Form0, l'événement Activate se déclenche, il me suffit donc de comparer MyVar1 et MyVar2 pour déclencher ou non un autre événement. Bon, si vous avez une formule plus rationnelle... D'autant que là, je fais la mémorisation dans un module et la comparaison dans la Form0_Activate(), c'est quand même un peu lourd... | |
gambix | #2 Posté le 18/2/2010 à 20:39:00 |
Faire simple ! | bon activate est appelé achaque fois que le formulaire a le focus ..; (que le formulaire est "activé") http://gambasdoc.org/help/comp/gb.qt/form?fr http://gambasdoc.org/help/comp/gb.qt/window/.activate?fr http://gambasdoc.org/help/comp/gb.qt/window/.open?fr http://gambasdoc.org/help/comp/gb.qt/window/.close?fr le dernier devrait t'éclairer http://gambasdoc.org/help/doc/window-activate?fr Moins de texte dans une signature c'est agrandir son espace. |
Foromus | #3 Posté le 18/2/2010 à 20:52:00 |
Oui, merci. J'avais effectivement visité tous les liens ci-dessus, avant d'écrire !.. D'où ma réflexion en additif... Non, mais je ne fais pas que demander, je cherche aussi avant, faut pas croire ! A part ça, ma solution fonctionne tout à fait correctement, je vais donc m'en contenter. Autrement, et je me répète, je suis assez épaté par Gambas, je crois que quelqu'un qui a de bonnes bases en programmation peut arriver à faire des choses assez intéressantes. | |
gambix | #4 Posté le 18/2/2010 à 21:42:00 |
Faire simple ! | engors pour être clair ne ne capte pas du tout ce que tu veut faire ... ça sert a quoi d'appeler un formulaire dans Activate ? autre chose... étudit le problème des formulaire dit modale ! ... le programme est stoppé en attendant la fermeture de celui-ci... MessageBox est modale. Moins de texte dans une signature c'est agrandir son espace. |
Foromus | #5 Posté le 18/2/2010 à 22:03:00 |
Effectivement, je ne vois pas trop l'intérêt d'appeler un formulaire depuis Activate. Etant donné qu'on vient d'y rentrer, ce n'est pas pour en appeler un autre immédiatement ! Et si besoin était, on pourrait toujours mettre un timer ou un bouton. Effectivement, et ça me revient, il y a des "choses" modales, j'avais déjà vu ça avec VB.. Il y a quelques années que je ne programmais plus (ou juste quelques détails), et visiblement, j'ai oublié des choses. Désolé... | |
gambix | #6 Posté le 18/2/2010 à 22:06:00 |
Faire simple ! | si c'est un appel unique utilise plutot l'event _open Moins de texte dans une signature c'est agrandir son espace. |
Foromus | #7 Posté le 22/2/2010 à 21:19:00 |
Bonsoir, Quand on revient sur une feuille et que l'on veut faire quelque chose, genre afficher un truc ou en mémoriser un autre, je ne vois pas d'autre solution que de passer par Form_Activate. Finalement, je suis arrivé à ce que je voulais, même si c'est un peu tordu... | |
1 |