Hmmm ....
Cela va être un coup de feu, mais, vous avez dit que vous avez le KeyUp, KeyDown et gestionnaires d'événements KeyPress droit? Avez-vous mis le drapeau e.Handled à true dans les gestionnaires d'événements, consultez ici:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
Jetez un coup d'oeil ici dans le MSDN au sujet de cette propriété Handled. (Si vous avez MSDN 2008 SP 1 installé localement, le lien est ms-help://MS.MSDNQTR.v90.en/fxref_system.windows.forms/html/dfc80b44-1d79-6315-cbea-1388a048c018.htm
)
Pour citer:
Handled is implemented differently by different controls within Windows Forms.
For controls like TextBox which subclass native Win32 controls, it is
interpreted to mean that the key message should not be passed to the underlying
native control.
If you set Handled to true on a TextBox, that control will not pass the key
press events to the underlying Win32 text box control, but it will still
display the characters that the user typed.
Peut-être qu'il est pas défini dire e.Handled = false;
empêchant ainsi l'événement TextChanged de tir?
Pouvez-vous vérifier et confirmer cela?
Edit: Après la réponse de dreadprivateryan, je peux soupçonner (en raison du manque d'un code affiché), en fonction de sa réponse, e.Handled est vrai lorsque la touche Entrée est pressée et fausse pour tout le reste qui dans mon esprit, pense que c'est la raison pour laquelle aucune frappe supplémentaire n'est acceptée à cause de cela.Essayez-vous de mettre le focus sur un autre contrôle lorsque la touche Entrée est enfoncée? Il se peut que KeyUp et KeyDown soient tous les deux en conflit ...
Enlever le crochet du clavier et le désactiver ...
Ma suggestion est de changer complètement le code de cette manière comme indiqué, sortez KeyDown ou KeyUp Event Handler comme ils sont, de manière simpliste, sont les mêmes, ok, techniquement, il est désigné respectivement pour quand une touche est enfoncée, et de même quand une clé est relâchée. Jetez un oeil à ce lien here. Il y avait une question similaire posté here sur SO. Dans l'exemple ci-dessous, j'ai utilisé le gestionnaire d'événements keyUp pour basculer le focus sur le contrôle disponible suivant lorsque la touche Entrée est enfoncée. Dans le gestionnaire d'événements KeyPress, ceci filtre simplement l'entrée et n'autorise les numéros que de 0 à 9, n'importe quoi d'autre est annulé. Inclus dans ce gestionnaire d'événements, est la possibilité de la touche de retour arrière pour fournir l'édition.
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) SendKeys.Send("{TAB}");
}
private const string VALID_KEYS = "";
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (VALID_KEYS.IndexOf(char.ToUpper(e.KeyChar)) != -1 || e.KeyChar == (char)8)
e.Handled = false;
else
e.Handled = true;
}
Hope this helps, Meilleures salutations, Tom.
Quelles frappes utilisez-vous pour faire l'expérience de cela? Textchanged fait partie de la propriété Text for the textbox, et toute entrée (alpha et numérique avec des symboles tels que $) déclenche l'événement TextChanged, les touches fléchées, insert, overwrite ne se déclenchent pas mais sont interceptées par l'événement KeyUp/KeyDown . – t0mm13b
Un exemple évident serait d'appuyer sur Retour arrière lorsque la zone de texte est vide. Aucun événement TextChange mais tous les événements de clavier. –
Je suis définitivement en train d'utiliser des frappes alphanumériques normales lorsque cela se produit. – dreadpirateryan