C# ou .NET Rinçage Tampon de Clavier
Comment puis-je vider le tampon de clavier en C# à l'aide de Windows Forms?
J'ai un scanner de code-barres qui agit comme un clavier. Si vraiment une longue code à barres est scanné et le bouton annuler est frappé sur la forme, j'ai besoin de la mémoire tampon du clavier pour être effacé. J'ai donc besoin de rincer et d'ignorer tous en attente d'entrée. J'ai besoin de la mémoire tampon effacé parce que si le code à barres contient des espaces, les espaces sont traitées comme des clics de bouton qui est inutile.
- Qu'entendez-vous par tampon de clavier? Voulez-vous de rincer et d'ignorer tous dans l'attente de l'entrée que vous n'avez pas encore été traités?
- Pourquoi essayez-vous de faire?
- Oui...par exemple j'ai un scanner de code-barres qui agit comme un clavier...si vraiment une longue code à barres est scanné et le bouton annuler est frappé sur la forme, j'ai besoin de la mémoire tampon du clavier pour être effacé. J'ai donc besoin de rincer et d'ignorer tous en attente d'entrée.
- J'ai besoin de la mémoire tampon effacé parce que si le code à barres contient des espaces, les espaces sont traitées comme des clics de bouton qui est inutile.
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr que vous pouvez le faire. Les frappes aller dans la file d'attente d'événements pour l'événement principal de la boucle. Toute action que vous prenez pour annuler ces frappes seront placés dans la file d'attente après les frappes.
La boucle d'événement ne se rendre à votre action d'annulation après les frappes ont été traitées. Vous ne pouvez annuler la séquence de touches basé sur un événement qui se passe dans le milieu de la séquence de touches.
Ensemble
KeyPreview
sur le Formulaire detrue
, puis prendre leKeyPress
de l'événement et de définire.Handled
àtrue
si l'utilisateur a cliqué sur annuler.MODIFIER: Attraper le Formulaire événement KeyPress
tout (de la Console.KeyAvailable) { Console.ReadKey(true); }
@Chris:
Console.KeyAvailable
a déclenché une exception sur moi parce que la Console n'a pas le focus.Le message de l'exception a été utile, bien. Il a suggéré d'utiliser
Console.In.Peek()
à lire dans cette instance.J'ai pensé qu'il serait intéressant de noter ici une solution alternative et pour la postérité.
Désactiver la forme et de la force de tous les traitement pour se produire avec la fonction DoEvents alors qu'il est désactivé. Les Contrôles devraient rejeter toute keystokes parce qu'ils sont handicapés.
Puis de le ré-activer le formulaire.
Vous pourrait faire au niveau du BIOS de rinçage (http://support.microsoft.com/?scid=kb%3Ben-us%3B43993&x=22&y=10) mais je déconseillerais ce faible niveau depuis Windows ne prend clavier de mise en mémoire tampon a un niveau plus élevé.
Le meilleur moyen semble être de manger tout arrivant char alors qu'un indicateur spécifique est définie. Comme SLaks suggère, je mettrais
KeyPreview
true et la valeur dee.Handled
à vrai soit dansKeyPress
ou dansKeyDown
.. devrait pas faire de différence.C'est une vieille question, mais j'ai eu le même problème et j'ai trouvé une bonne façon de le faire...
Lorsque Application.DoEvent() est appelée, le keystoke tampon d'appel de l'événement KeyPress mais _keypress est définie sur false, donc ça va passer tous les cas, après que _keypress retour à true pour être prêt pour un autre événement keypress !