Programmer un event general dans tout le project

Soyez le premier à donner votre avis sur cette source.

Vue 3 978 fois - Téléchargée 358 fois

Description

Voici la reponse a ma propre question que j'ai soumise il y peu dans le forum.
Un collegue de travail me l'a donnée, et je vais donc en faire profiter tout le monde.

Supposons que vous avez un project avec des centaines de forms (certaines childs d'autres modales), et que vous desirez capturer une event combinaison du clavier dans chaque form, pour executer une sub qu'on va appeler 'Set_Name_Form'.

Que faire?
Une premiere solution consiste a ecrire le code dans chaque form. Dans les projects volumineux, solution vite rasoir!
Une deuxieme solution consiste a utiliser un timer et une classe depuis la MDI de la maniere ci-dessous:

Source / Exemple :


Private cl As New clEventGeneral

Private Sub MDIForm_Load()
    Set cl.TheTimer = Timer1
End Sub

'C'est tout!!!

Conclusion :


A chaque interval de temps, le timer dans la classe va referencier la form active par Screen.ActiveForm

Si dans la form active l'utilisateur appuie sur une touche par exemple Ctrl+Q,
la form definie dans la classe va capturer l'event et lancer la sub.

Le principal avantage de cette solution est qu'il n'implique pas d'ecrire du code dans chaque form. Ce qui rend donc l'actualisation tres rapide (comme changer la combinaison de touche par ex.)!

La classe bien comme un exemple pour la tester sont dans le zip.

Je n'aime pas utiliser les timer dans mes projects, mais je n'ai pas trouve mieux.
Si qq a une meilleur idée...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Silmon
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

MadLucas
Merci beaucoup pour le projet posté. Je vais l'etudier ce soir.

Pour repondre a tes questions, ce sont des projets MDI
Toutefois une centaine de forms ne sont pas des childs mais modales.

L'histoire de la "form qui bug", c'est tres simple:
Imagine un testeur essayant le projet. Il ouvre une form qq.
Au bout d'un moment, un msg d'erreur apparait.
ll fait la combination de touche sur la form et son nom s'affiche (genre un truc 'FrmFactPendCli'). Il le note, communique aux programmeurs. Ces derniers pour corriger l'erreur, n'ont ainsi pas besoin de perdre de temps a localiser dans les 400 forms celle qui a donnée un pb.

L'objectif est donc gagner du temps, pas en perdre.

Aller, à la revoyure.

Silmon
LogRaam (aka Gabriel Mailhot)
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Salut Silmon,


Tiens, j'ai posté un projet pour toi...

http://www.vbfrance.com/code.aspx?ID=26874

En espérant que ça fera l'affaire...



MadLucas
LogRaam (aka Gabriel Mailhot)
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Ok je vois,

Est-ce un projet .Net ?
Est-ce un projet SDI ? MDI ? Tabbed ?
Est-ce plusieurs applications indépendantes qui doivent dialoguer entre elles ?
Par "une forme qui bug", bug-t-elle avec un "raise event" ? Ne serais-ce pas une meilleure solution que de faire du trappage d'erreurs ?

Je vais poster une petite App sur le WinProc, mais peut-être existe-t-il une meilleure solution encore ?


MadLucas
Silmon
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

Salut Madlucas.
c'est exactement ça!

Plus précisemment, on cherche le moyen de lancer une sub qui affiche le nom de la forme active lorsque qu'on clique sur une combine genre Ctrl+Q.

Dans un big project, cela nous permettrait d'indentifier rapidement une form qui bug.

C'est pas urgent. Aussi quand tu pourras, ton aide sera la bienvenue.

++
LogRaam (aka Gabriel Mailhot)
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Salut Silmon,


J'ignorais que j'avais provoqué le Graal à ton égard.. ;-)

À bien comprendre ce que tu cherches à faire, c'est d'être capable de reconnaître lorsque l'utilisateur déclenche Ctrl+Q peu importe où dans ton application ?

Je travail beaucoup ces temps-ci, ce qui explique que je garde précieusement le Graal pour l'instant.. Laisse-moi quelques temps afin que je me replace dans mes devis et ensuite je te donne ma solution.


++



MadLucas

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.