2009-03-04 7 views
3

Ich habe ein Tastendruck-Ereignis, und ich möchte die Combobox den Tastendruck verarbeiten, wenn die Eingabe nicht textuell ist. I.E. Wenn es die Taste nach oben oder nach unten ist, lassen Sie die Combobox es so handhaben, wie es normalerweise wäre, aber wenn es Interpunktion oder alphanumerisch ist, möchte ich darauf reagieren.Nur für Texteingabe in einem KeyPress-Ereignis

Ich dachte, Char.IsControl (e.KeyChar)) würde den Trick tun, aber es fängt nicht die Pfeiltasten, und für eine Combobox, das ist wichtig.

Antwort

2

Hier ist ein Beispiel, das ich von einer vorherigen Antwort hatte, die ich gab. Es kam aus der Dokumentation MSDN und ich denke, man sollte es in der Lage sein, gut zu modifizieren, basierend auf welche Zeichen Sie erlauben oder verbieten wollen:

// 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

werden, dass die Arbeit mit internationalen Zeichen? – Malfist

+0

@Malfist: Das ist eine gute Frage und ich weiß es nicht persönlich. Die einzige andere Sache, die ich mir vorstellen könnte, die Sie für internationale Charaktere tun, ist ein weiteres Einchecken dort durchzuführen, das die ASCII/Unicode-Werte erlaubt oder verbietet, an denen Sie interessiert sind. – TheTXI

0

Sie können keine Textzeichen überprüfen müssen.

Ich hoffe, dass der folgende Code hilft: obwohl

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