Bueno pues esto es algo que me han preguntado mucho, por ahi en la web he visto inclusive controles personalizados definidos para esta tarea, pero yo en particular prefiero las cosas sencillas y eficaces, asi que aqui les dejo un codigo de apenas unas lineas implementado en el evento KeyDown del textbox, que ocurre justo antes de que el caracter pulsado sea agregado en el textbox, esto es muy util si desarrollan aplicaciones con calculos, como una calculadora por ejemplo.
Ok y aqui esta el codigo
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
'Omitimos las teclas suprimir, flecha izquierda, flecha derecha, backspace, y el punto decimal
If e.KeyCode <> 190 And e.KeyCode <> Keys.Back And e.KeyCode <> Keys.Delete _
And e.KeyCode <> Keys.Right And e.KeyCode <> Keys.Left Then
'Verificamos que la tecla presionada este en el rango de 0 a 9, si no cancelamos
If e.KeyCode < Keys.D0 Or e.KeyCode > Keys.D9 Then
e.SuppressKeyPress = True
End If
End If
'Si se tecleo el punto decimal ,verificamos que el textbox no contenga ya un punto decimal
'Al mismo tiempo verificamos que el textbox no este vacio
If e.KeyCode = 190 And (TextBox1.Text.Contains(".") Or TextBox1.Text = "") Then
e.SuppressKeyPress = True
End If
End Sub
Cualquier error por favor haganmelo saber.
Probado en Visual Basic 2008