cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 3 oct. 2005 à 22:51
Salut,
En fait ton code est tout à fait bon.
Tu as juste omis une chose : Ctrl+Maj+F contient la combinaisons Ctrl+F, que tu bloques avec ton premier MessageFilter si je ne m'abuse :-)
Donc soit tu testes comme ceci dans ton filtre pour la combinaison Ctrl+F :
if ( m.Msg == WM_KEYDOWN
&& m.WParam == (IntPtr)Keys.F // touche F
&& (( ctrlState >> 15 ) & 0x1) == 0x1 // ctrl (gauche ou droit) est pressée
&& !( ShiftState <0) // Shift (gauche ou droit) n'est pas pressée
)
Soit tu ajoutes l'instance du filtre pour Ctrl+Maj+F avant celui pour Ctrl+F, mais ça c'est moche :p
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 3 oct. 2005 à 23:02
Pas bête ça, enfin avec le MessageFilter si il veut passer en mode de gestion pour l'application globale il lui suffira de modifier son test sur le Handle (pour faire ce que fait la boite de dialogue recherche de VS par exemple, quand on fait CTRL+H alors qu'on est dans la boite de recherche), alors qu'avec le KeyPreview il est limité au formulaire lui même.
Enfin si la cible sera de toutes façon un seul formulaire sans "switch de mode de recherche" c'est sur que ta solution est bien moins lourde je pense :-)
Cocoricoooooooo !!!!
coq
MVP Visual C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 4 oct. 2005 à 08:49
merci a vous deux...
bon je continue avec la solution de coq, (vu que c'est celle que j'ai implementer dans mon appli)
mais je garde ton autre solution pour des evenements ponctuel :)
en effet il fallait sur le CTRL + F Tester l'etat du shift...
bon je passerais aussi que j'ai oublier hier soir de rajouter les messagefilter a l'application
CTRL_SHIFT_F = new CTRLSHIFTF_MessageFilter(this);
Application.AddMessageFilter(CTRL_SHIFT_F);
et ne pas oublier a la fermeture de la form :
Application.RemoveMessageFilter(CTRL_SHIFT_F);
En fait ta solution lutinore fonctionnerait tres bien...vu que mes
combinaisons de touche ne se font que sur une form ...(celle dont
j'herite en fait dans toute mon appli)...mais bon tout refaire alors
que les messagefilter fonctionne aussi.........