2009-04-26 11 views
3

Ich habe einen Windows Forms-App mit einer maskedtextbox Kontrolle machen, die ich nur alphabetische Werte inWie Textbox nur akzeptiert alphabetische Zeichen

Idealerweise würde dies verhalten solche akzeptieren will. Dass Drücken einer beliebige andere Tasten als Buchstabentasten würde entweder zu keinem Ergebnis führen oder dem Benutzer sofort eine Rückmeldung über das ungültige Zeichen geben.

Antwort

4

Von MSDN (Dieser Code zeigt, wie das KeyDown-Ereignis für das eingegebene Zeichen gehandhabt wird. In diesem Beispiel wird nur nach numerischen Eingaben gesucht. Sie könnten es so ändern, dass es für alphabetische Eingabe verwendet wird numerisch):

private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (Regex.IsMatch(e.KeyChar.ToString(), @"\p{L}")) 
    { 
     // this is a letter 
    } 
    else 
    { 
     // this is NOT a letter 
    } 
} 

Update:: beachten sie, dass das oben RegexMuster nur alphabetische Zeichen übereinstimmen, so ist es nicht zulassen, dass SPAC

// 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; 
    } 
} 
3

Dieser Code alphabetisches Zeichen Tastendrücke von nicht alphabetischen Angeboten unterscheiden wird es, Kommas, Punkte und so weiter. Um mehr Arten von Zeichen zu ermöglichen, müssen Sie diejenigen auf das Muster hinzuzufügen:

// allow alphabetic characters, dots, commas, semicolon, colon 
// and whitespace characters 
if (Regex.IsMatch(e.KeyChar.ToString(), @"[\p{L}\.,;:\s]")) 
6

Diese Frage wahrscheinlich gefragt wurde, und eine Million Mal auf jedem denkbaren Programmierung Forum beantwortet. Jede gegebene Antwort unterscheidet sich von den angegebenen Anforderungen.

Da Sie eine MaskedTextBox verwenden, stehen Ihnen zusätzliche Validierungsfunktionen zur Verfügung und müssen nicht wirklich mit Tastaturdrücken umgehen. Sie können die Mask-Eigenschaft einfach auf "L" (Zeichen erforderlich) oder "?" (optionale Zeichen). Um dem Benutzer eine Rückmeldung zu geben, dass die Eingabe nicht akzeptabel ist, können Sie die Eigenschaft BeepOnError verwenden oder eine QuickInfo hinzufügen, um die Fehlermeldung anzuzeigen. Dieser Feedback-Mechanismus sollte im MaskedInputRejected Event-Handler implementiert werden.

Das Steuerelement MaskedTextBox bietet eine ValidatingType-Eigenschaft zum Überprüfen der Eingabe, die die Anforderungen der Maske erfüllt, aber möglicherweise nicht den richtigen Datentyp hat. Das Ereignis TypeValidationCompleted wird nach dieser Typvalidierung ausgelöst, und Sie können damit die Ergebnisse ermitteln.

Wenn Sie noch mit Tastendruckereignissen umgehen müssen, lesen Sie weiter ...!

Die Methode, die ich in Ihrem Fall empfehlen würde, ist, dass anstatt KeyDown Ereignis zu behandeln (Sie brauchen angeblich keine erweiterte Schlüsselhandling-Fähigkeit) oder mit einem Regex Input (ehrlich gesagt, Overkill) anzupassen, würde ich einfach die gebaut verwenden Eigenschaften der Char-Struktur.

private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    Char pressedKey = e.KeyChar; 
    if (Char.IsLetter(pressedKey) || Char.IsSeparator(pressedKey) || Char.IsPunctuation(pressedKey)) 
    { 
    // Allow input. 
    e.Handled = false 
    } 
    else 
    // Stop the character from being entered into the control since not a letter, nor punctuation, nor a space. 
    e.Handled = true; 
    } 
} 

Beachten Sie, dass dieser Ausschnitt können Sie punctutation und Separator-Tasten als auch behandeln.

3
// This is to allow only numbers. 
// This Event Trigger, When key press event occures ,and it only allows the Number and Controls., 
private void txtEmpExp_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if(Char.IsControl(e.KeyChar)!=true&&Char.IsNumber(e.KeyChar)==false) 
    { 
     e.Handled = true; 
    } 
} 

//At key press event it will allows only the Characters and Controls. 
private void txtEmpLocation_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) == true) 
    { 
     e.Handled = true; 
    } 
} 
+0

könnte Ihre Formatierung beheben möchten. –

1

// Fügen Sie ein Textfeld auswählen es & goto Events & In der Ereignisliste einen Doppelklick auf "keypress" Ereignis.

 if (!char.IsLetter(e.KeyChar)) 
     { 
      MessageBox.Show("Enter only characters"); 
     } 
    } 
0

Dies funktioniert für mich :)

private void txt_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = !((e.KeyChar != 'ñ' && e.KeyChar != 'Ñ') && char.IsLetter(e.KeyChar)); 
    } 
0

Versuchen this Code

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space); 
    } 
Verwandte Themen