2010-04-07 8 views
7

Come posso restituire la chiave ?, media se voglio consentire solo valori interi nella casella di testo, come posso non consentire all'utente di non inserire valori non interi, per quanto riguarda l'evento KeyPress, lo so ci sono altri modi come l'espressione per abbinare il valore della stringa, ma non voglio assegnare un valore non valido alla casella di testo.Annulla evento key press

if ((value >0 a&&(value <=9)) then 
    assigned 
else 
    return 

risposta

14

Utilizzare la proprietà Handled

e.Handled = true; 

Esempio da MSDN: link

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

Si potrebbe utilizzare MaskedTextBox e costringerlo a essere un numero intero solo.

+0

per WPF, si sarebbe forse necessario consultare questa pagina: http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf – Vlad

0

è possibile ereditare da TextBox e quindi:

Protected Overrides Sub OnTextInput(ByVal e As System.Windows.Input.TextCompositionEventArgs) 

     Dim newChar As Char = Convert.ToChar(e.Text) 
     If Not [Char].IsDigit(newChar) Then e.Handled = True 

End Sub 

C# versione

protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e) 
{    
    char newChar = Convert.ToChar(e.Text);        
    if (!Char.IsDigit(newChar)) e.Handled = true; 
} 
3

È possibile utilizzare evento Pressione, come di seguito. utilizzare e.Handled su true per annullare l'input dell'utente

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!Char.IsDigit(e.KeyChar)) e.Handled = true; 
    } 
5

creare una stringa con i caratteri che quello di consentire all'utente di inserire.

Usa KeyDown o KeyUp per gestire le chiavi speciali

private void tbN1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    String sKeys = "1234567890ABCDEF"; 
    if (!sKeys.Contains(e.KeyChar.ToString().ToUpper())) 
     e.Handled = true; 
} 
0

Tecnicamente questo è sbagliato dal momento che hai contrassegnato la tua domanda WPF. Ma dal momento che hai accettato l'altra risposta di Windows Form, pubblicherò la mia soluzione che funziona con numeri reali anziché interi. È anche localizzato per accettare solo il separatore decimale delle impostazioni locali correnti.

private void doubleTextBox_KeyPress (object sender, KeyPressEventArgs e) 
{ 
    var textBox = sender as TextBoxBase; 
    if (textBox == null) 
     return; 

    // did the user press their locale's decimal separator? 
    if (e.KeyChar.ToString() == CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator) 
    { 
     if (textBox.Text.Length == 0) // if empty, prefix the decimal with a 0 
     { 
      textBox.Text = "0" + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; 
      e.Handled = true; 
      textBox.SelectionStart = textBox.TextLength; 
     } 
     // ignore extra decimal separators 
     else if (textBox.Text.Contains(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)) 
      e.Handled = true; 
    } 
    // allow backspaces, but no other non-numeric characters; 
    // note that arrow keys, delete, home, end, etc. do not trigger KeyPress 
    else if (e.KeyChar != '\b' && (e.KeyChar < '0' || e.KeyChar > '9')) 
     e.Handled = true; 
}