protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { //Si VERR.MAJ alors les touches au dessus de AZERTY seront des chiffres, on laisse faire if (Console.CapsLock) return base.ProcessCmdKey(ref msg, keyData); switch (keyData) { //Touches au dessus de AZERTY sans SHIFT case Keys.D0: case Keys.D1: case Keys.D2: case Keys.D3: case Keys.D4 case Keys.D5: case Keys.D6: case Keys.D7: case Keys.D8: case Keys.D9: //c'est là qu'on transforme en chiffre //msg.WParam correspond au KeyCode de la touche, il suffit d'applique "une translation" //+= ne focntionne pas donc je le fais en 2 lignes int MonChiffre = (int)msg.WParam + 48; msg.WParam = (IntPtr)MonChiffre; return base.ProcessCmdKey(ref msg, keyData); default: return base.ProcessCmdKey(ref msg, keyData); } }
...(object sender, ..EventArgs e)
/// <summary> /// Génére un chiffre si les touches D1 à D0 sont appuyées sans Maj. /// Cette procédure doit être appelée dans le KeyDown d'une MaskedTextBox dont le masque est 000..0. /// </summary> /// paramètre e de l'événement /// <returns></returns> private void Chiffre(ref KeyEventArgs e) { //si la VerMaj est actif, on sort if (Console.CapsLock) return; //Si une touche D0 à D9 est appuyée sans le shift if ((e.KeyValue > 47) && (e.KeyValue < 58) && (!e.Shift)) { if (e.KeyCode == Keys.D8) SendKeys.Send("{BKSP}"); //ne me plait pas //e.Handled <bold>(e.KeyCode</bold> Keys.D8); Ne fonctionne pas //e = null; ne marche pas non plus int MonChiffre = e.KeyValue - 48; // 0 c'est 48, 1 c'est 49 etc. SendKeys.Send(MonChiffre.ToString()); //préfèrerais un truc du style e = 0 } }
using System; using System.Windows.Forms; namespace ChiffreBox { class MaMaskedTextBox:MaskedTextBox { public MaMaskedTextBox() { } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { //Si VERR.MAJ alors les touches au dessus de AZERTY seront des chiffres, on laisse faire if (Console.CapsLock) return base.ProcessCmdKey(ref msg, keyData); switch (keyData) { //Touches au dessus de AZERTY avec SHIFT //Cas présents pour ne pas risquer de couac avec la série suivante case (Keys.D0 | Keys.Shift): case (Keys.D1 | Keys.Shift): case (Keys.D2 | Keys.Shift): case (Keys.D3 | Keys.Shift): case (Keys.D4 | Keys.Shift): case (Keys.D5 | Keys.Shift): case (Keys.D6 | Keys.Shift): case (Keys.D7 | Keys.Shift): case (Keys.D8 | Keys.Shift): case (Keys.D9 | Keys.Shift): //c'est des chiffres, donc on laisse faire return base.ProcessCmdKey(ref msg, keyData); //Touches au dessus de AZERTY sans SHIFT case Keys.D0: case Keys.D1: case Keys.D2: case Keys.D3: case Keys.D4: case Keys.D5: case Keys.D6: case Keys.D7: case Keys.D8: case Keys.D9: //c'est là qu'il faut appliquer la majuscule int MonChiffre = (int)msg.WParam - 48; // 0 c'est 48, 1 c'est 49 etc. SendKeys.Send(MonChiffre.ToString()); //préfèrerais un truc du style msg = MonChiffre!! return true; default: return base.ProcessCmdKey(ref msg, keyData); } } } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionprotected override bool ProcessCmdKey(ref Message msg, Keys keyData) { //Si VERR.MAJ alors les touches au dessus de AZERTY seront des chiffres, on laisse faire if (Console.CapsLock) return base.ProcessCmdKey(ref msg, keyData); switch (keyData) { /* pour moi, cette partie ne sert à rien //Touches au dessus de AZERTY avec SHIFT //Cas présents pour ne pas risquer de couac avec la série suivante case (Keys.D0 | Keys.Shift): case (Keys.D1 | Keys.Shift): case (Keys.D2 | Keys.Shift): case (Keys.D3 | Keys.Shift): case (Keys.D4 | Keys.Shift): case (Keys.D5 | Keys.Shift): case (Keys.D6 | Keys.Shift): case (Keys.D7 | Keys.Shift): case (Keys.D8 | Keys.Shift): case (Keys.D9 | Keys.Shift): //c'est des chiffres, donc on laisse faire return base.ProcessCmdKey(ref msg, keyData); */ //Touches au dessus de AZERTY sans SHIFT case Keys.D0: case Keys.D1: case Keys.D2: case Keys.D3: case Keys.D4: case Keys.D5: case Keys.D6: case Keys.D7: case Keys.D8: case Keys.D9: return base.ProcessCmdKey(ref msg, keyData | Keys.Shift); default: return base.ProcessCmdKey(ref msg, keyData); } }