[DllImport("user32")] private static extern short GetAsyncKeyState(int vKey); private const int VK_CONTROL = 0x11; public bool PreFilterMessage(ref Message m) { // récupération de l'etat de la touche ctrl short ctrlState = GetAsyncKeyState(VK_CONTROL); // si le message est une pression sur touche et que la touche est CTRl + S if ( m.Msg == WM_KEYDOWN && m.WParam == (IntPtr)Keys.S // touche S && (( ctrlState >> 15 ) & 0x1) == 0x1 // ctrl (gauche ou droit) est pressée ) { // si le message est destiné a notre form ou un controle qu'il contient, on le fermeif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true ) { //On lance l'enregistrement form.Save_Enregistrement(); // blocage du message return true; } } // le message n'etait pas celui qu'on attendais, on le laisse passer return false; }
internal class CTRLS_MessageFilter : IMessageFilter { // constructeur, on lui passe le form qui sera concerné par les actions public CTRLS_MessageFilter(Form form) { this.form = form; } [DllImport("user32")] private static extern short GetAsyncKeyState(int vKey); private const int WM_KEYDOWN = 0x0100; private const int VK_CONTROL = 0x11; private Form form; public bool PreFilterMessage(ref Message m) { // récupération de l'etat de la touche ctrl short ctrlState = GetAsyncKeyState(VK_CONTROL); // si le message est une pression sur touche et que la touche est CTRl + S if ( m.Msg == WM_KEYDOWN && m.WParam == (IntPtr)Keys.S // touche S && (( ctrlState >> 15 ) & 0x1) == 0x1 // ctrl (gauche ou droit) est pressée ) { // si le message est destiné a notre form ou un controle qu'il contient, on le fermeif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true ) { //On lance l'enregistrement w_FormBase f = (w_FormBase) form; f.f_Valider(); // blocage du message return true; } } // le message n'etait pas celui qu'on attendais, on le laisse passer return false; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question/// <summary> /// Méthode à éxécuter pour lancer la validation des données /// </summary> /// <returns>False (par défaut) si la fenêtre doit gérer elle même la combinaison de touche(après notre traitement), /// true si on veut arreter l'execution après notre traitement</returns> public virtual bool f_Valider() { //On laisse la main à la fenêtre return false; }
internal class CTRLS_MessageFilter : IMessageFilter { // constructeur, on lui passe le form qui sera concerné par les actions public CTRLS_MessageFilter(w_FormBase form) { this.form = form; } [DllImport("user32")] private static extern short GetAsyncKeyState(int vKey); private const int WM_KEYDOWN = 0x0100; private const int VK_CONTROL = 0x11; private w_FormBase form; public bool PreFilterMessage(ref Message m) { // récupération de l'etat de la touche ctrl short ctrlState = GetAsyncKeyState(VK_CONTROL); // si le message est une pression sur touche et que la touche est CTRl + S if ( m.Msg == WM_KEYDOWN && m.WParam == (IntPtr)Keys.S // touche S && (( ctrlState >> 15 ) & 0x1) == 0x1 // ctrl (gauche ou droit) est pressée ) { // si le message est destiné a notre form ou un controle qu'il contient, on le fermeif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true ) { //On lance l'enregistrement bool ret = form.f_Valider(); // blocage du message return ret; } } // le message n'etait pas celui qu'on attendais, on le laisse passer return false; } }
switch(e.Button.tag.toString()) { case "VALIDER": //SendKeys.Send("^S"); f = (w_FormBase) Form_Mdi.ActiveMdiChild ; f.f_Valider (); break; }
public override bool f_Valider() { MessageBox.Show("Valider"); //On bloque le reste de l'execution return true; }
internal class CTRLS_MessageFilter : IMessageFilter { // constructeur, on lui passe le form qui sera concerné par les actions public CTRLS_MessageFilter(Form form) { this.form = (w_FormBase) form; } [DllImport("user32")] private static extern short GetAsyncKeyState(int vKey); private const int WM_KEYDOWN = 0x0100; private const int VK_CONTROL = 0x11; private w_FormBase form; public bool PreFilterMessage(ref Message m) { // récupération de l'etat de la touche ctrl short ctrlState = GetAsyncKeyState(VK_CONTROL); // si le message est une pression sur touche et que la touche est CTRl + S if ( m.Msg == WM_KEYDOWN && m.WParam == (IntPtr)Keys.S // touche S && (( ctrlState >> 15 ) & 0x1) == 0x1 // ctrl (gauche ou droit) est pressée ) { // si le message est destiné a notre form ou un controle qu'il contient, on le fermeif ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true ) { //On lance l'enregistrement bool ret = form.f_Valider(); // blocage du message return ret; } } // le message n'etait pas celui qu'on attendais, on le laisse passer return false; } }
if ( m.HWnd form.Handle || form.Contains(Control.FromHandle(m.HWnd)) true ) { //On lance l'enregistrement bool ret = form.f_Valider(); // blocage du message return ret; }