Вы используете неправильное событие, вы должны использовать KeyPressed. Это срабатывает, когда пользователь нажимает реальные клавиши ввода. KeyDown здесь бесполезен, виртуальная клавиша переводится на клавиатуру в соответствии с раскладкой клавиатуры. Трудно догадаться, что это может быть, если вы сами не переведете нажатие клавиши. Это сложно.
Код:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
string allowed = "0123456789*\b";
if (allowed.IndexOf(e.KeyChar) < 0) e.Handled = true;
}
\ b требуется, чтобы позволить пользователю вернуться назад.