Использовать KeyDown вместо KeyPress. В KeyDown приходит не печатаемый символ, а код клавиши, в том числе, и управляющие клавиши.
В вашем случае нужно вызывать оба события. Вначале вызывается KeyDown, и если он не выполнил работу обработки (не указан e.Handled = true), то вызовется обработчик KeyPress.
Вот примерный код обработки backspace:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Back)
{
var selectionStart = textBox1.SelectionStart;
if (textBox1.SelectionLength > 0)
{
textBox1.Text = textBox1.Text.Substring(0, selectionStart) + textBox1.Text.Substring(selectionStart + textBox1.SelectionLength);
textBox1.SelectionStart = selectionStart;
}
else if (selectionStart > 0)
{
textBox1.Text = textBox1.Text.Substring(0, selectionStart - 1) + textBox1.Text.Substring(selectionStart);
textBox1.SelectionStart = selectionStart - 1;
}
e.Handled = true;
}
}