bool isLegalChar = false; //class-level variable //Use both the Keypress & KeyDown events to trap your keys. Keydown fires first!!! //I allow a-z, space bar, & backspace. No numbers or special keys! //Define the legal keys in KeyDown and let Keypress do the actual filtering! private void txtCustomer_KeyPress(object sender, KeyPressEventArgs e) { if (isLegalChar) e.Handled = false; else e.Handled = true; } private void txtCustomer_KeyDown(object sender, KeyEventArgs e) { isLegalChar = false; if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) | (e.KeyCode == Keys.Space | e.KeyCode == Keys.Back)) isLegalChar = true; else isLegalChar = false; } //Another way to do it // 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; } } } } // 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; } }