¿Cómo hacer un TextBox que solo acepte números enteros o decimales en C# .net Windows Forms?

Para el caso de obligar a un TextBox en Windows forms para que solo acepte números, tenemos que agregar una funciona al textbox en su evento KeyPress. Esto lo podemos hacer dando clic en el control y en la pantalla de propiedades seleccionar el botón de eventos (el relámpago) y dar doble clic en el evento llamado KeyPress. Una vez que se asigna una función automática, ponemos el siguiente código:

private void MiTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
         if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) )
         {
             e.Handled = true;
         }
}

Con eso bastara para obligar a tu control a no permitir letras ni otros caracteres que no sean números.

Podemos hacer lo mismo para números con decimales, pegando el siguiente código.

private void MiTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
          if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
          {
                e.Handled = true;
          }

            // solo 1 punto decimal
            if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
          {
                e.Handled = true;
          }
}