Using the Romasz link in my first comment, I came up with this solution:
private void tbInput_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) { double dtemp; if (!double.TryParse(sender.Text, out dtemp) && sender.Text != "") { int pos = sender.SelectionStart - 1; sender.Text = sender.Text.Remove(pos, 1); sender.SelectionStart = pos; } }
This works fine if you donβt select part of the input value and then enter the wrong character.
Edit: I used an improved version to use Regex. So, now I can check what content should be allowed to enter:
private void tbInput_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) { if (!Regex.IsMatch(sender.Text, "^\\d*\\.?\\d*$") && sender.Text != "") { int pos = sender.SelectionStart - 1; sender.Text = sender.Text.Remove(pos, 1); sender.SelectionStart = pos; } }
source share