2010-04-07 14 views
7

Jak mogę zwrócić klucz ?, jeśli chcę zezwolić tylko na wartości całkowite w polu tekstowym, w jaki sposób uniemożliwić użytkownikowi wprowadzanie niecałkowitych, dotyczących, KeyPress zdarzenia, wiem istnieją inne sposoby, takie jak wyrażenie, aby dopasować wartość ciągu, ale nie chcę przypisać nieprawidłowej wartości do pola tekstowego.Anuluj Zdarzenie przyciśnięcia klawisza

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

Odpowiedz

14

pomocą obsługiwanego nieruchomość

e.Handled = true; 

przykład z 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

Można użyć MaskedTextBox i zmusić go do być tylko liczbą całkowitą.

+0

dla WPF, byś może trzeba skonsultować tę stronę: http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf – Vlad

0

można dziedziczyć z TextBox, a następnie:

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# wersja

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

Można użyć przyciśnięcie zdarzenie jak poniżej. użyj e.Handled do wartości true, aby anulować wprowadzanie użytkownika

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

Utwórz ciąg znaków zawierający znaki, które użytkownik może wprowadzić.

Zastosowanie KeyDown lub KeyUp obsłużyć klawisze specjalne

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

Technicznie to jest złe ponieważ określili swoje pytanie WPF. Ale ponieważ zaakceptowałeś drugą odpowiedź Windows Forms, opublikuję moje rozwiązanie, które działa dla liczb rzeczywistych, a nie liczb całkowitych. Jest również zlokalizowane, aby akceptować tylko dziesiętny separator bieżącego ustawienia narodowego.

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