2009-03-04 14 views
3

J'ai un événement de presse de touche, et je veux que la combobox gère la touche si l'entrée n'est pas textuelle. C'EST À DIRE. Si c'est la touche haut ou bas, laissez la zone de liste déroulante gérer comme elle le ferait normalement, mais si c'est la ponctuation, ou alphanumérique je veux agir sur elle.Agir uniquement sur la saisie de texte dans un événement KeyPress

Je pensais que Char.IsControl (e.KeyChar)) ferait l'affaire, mais il n'attrape pas les touches fléchées, et pour une combobox, c'est important.

Répondre

2

Voici un exemple d'une réponse précédente que j'ai donnée. Il est venu de la documentation MSDN et je pense que vous devriez être en mesure de le modifier bien sur la base duquel les caractères que vous souhaitez autoriser ou interdire:

// Boolean flag used to determine when a character other than a number is entered. 
private bool nonNumberEntered = false; 

// Handle the KeyDown event to determine the type of character entered into the control. 
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Initialize the flag to false. 
    nonNumberEntered = false; 

    // Determine whether the keystroke is a number from the top of the keyboard. 
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) 
    { 
     // Determine whether the keystroke is a number from the keypad. 
     if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) 
     { 
      // Determine whether the keystroke is a backspace. 
      if(e.KeyCode != Keys.Back) 
      { 
       // A non-numerical keystroke was pressed. 
       // Set the flag to true and evaluate in KeyPress event. 
       nonNumberEntered = true; 
      } 
     } 
    } 
    //If shift key was pressed, it's not a number. 
    if (Control.ModifierKeys == Keys.Shift) { 
     nonNumberEntered = true; 
    } 
} 

// This event occurs after the KeyDown event and can be used to prevent 
// characters from entering the control. 
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Check for the flag being set in the KeyDown event. 
    if (nonNumberEntered == true) 
    { 
     // Stop the character from being entered into the control since it is non-numerical. 
     e.Handled = true; 
    } 
} 
+0

cela fonctionnera avec des caractères internationaux si? – Malfist

+0

@Malfist: C'est une bonne question et je ne sais pas personnellement. La seule autre chose que je pourrais imaginer que vous fassiez pour les caractères internationaux est d'effectuer une autre vérification qui autoriserait ou interdirait les valeurs ASCII/Unicode qui vous intéressent. – TheTXI

0

Vous n'avez pas besoin de vérifier aucun caractère textuel.

J'espère que le code suivant aide:

void ComboBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(Char.IsNumber(e.KeyChar)) 
     ... 
    else if(Char.IsLetter(e.KeyChar)) 
     ... 
}