http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - Il existe une option dans Windows pour le réglage du délai de répétition. Cela signifie le délai entre la première frappe et les autres si l'on continue à appuyer sur la touche. Je crée une sorte de jeu et je dois me débarrasser de cette "fonctionnalité".Comment puis-je me débarrasser du délai de répétition de caractères en C#?
Jusqu'à présent, je suis parvenu à trouver cette méthode:
[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);
public static bool IsKeyPushedDown(Keys keyData)
{
return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}
Mais la méthode IsKeyPushedDown trouve si la touche est pressée au moment de l'appel de la fonction - donc je besoin d'une boucle pour tester si la clé est éteint. Le problème est que cela n'attrape toujours pas toutes les frappes - j'ai trop lent boucle je suppose.
Deuxième choix est prépondérant de ProcessCmdKey:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// processing keys
if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
cela fonctionne vraiment bien, mais elle est affectée avec un retard de répétition et donc le mouvement de mon monstre dans mon jeu est comme:
Y at-il une solution pour mon problème? Merci
EDIT: J'ai résolu le problème en combinant les deux procédures. Mais c'est une solution très laide. J'espère toujours qu'il y a une meilleure solution.
Examinez la solution que j'ai posté. C'est un peu plus élégant que de revenir à un PInvoke et de le pirater avec ProcessCmdKey. –