You're filtering all the valid values instead of invalid
Change this
e.Handled = regex.IsMatch(e.Text);
to
e.Handled = !regex.IsMatch(e.Text);
Update1 : e.Text
gives newly entered text, you can concatenate TextBox.Text
with e.Text
to frame full text.
TextBox tb = (TextBox) sender;
Regex regex = new Regex("^[1-9][0-9]*$");
e.Handled = !regex.IsMatch(tb.Text + e.Text);