I suggest using the KeyUp event. Use a Try-Catch clause with your Parse() function in the event handling code, something like
CODE
Try
Decimal.Parse(txtRetailDisc.Text)
Catch ex As Exception
' display friendly error message box?
End Try
Or you can do the TryParse() function.
If you can parse it correctly, then it's a valid number. Then you need to check if it's at most two decimal places (assuming that's the case). I can only think of regular expressions. Try this
CODE
If Regex.IsMatch(txtRetailDisc.Text, "^\d+(\.\d{2})?$") Then
' is correct!
Else
' is wrong
End If
You're looking a either something like 123 or 123.4 or 123.45. The expression basically says to look for at least one digit, with optional decimal point and trailing digits. There are at most 2 trailing digits. You'd probably want to do more research on regular expression patterns...
If both tests pass, then you have a valid number that you want!