Cómo permitir solamente números dentro de una caja de texto en Winforms C#

Para crear una caja de texto en Windows Form que acepta solamente números, tienes 2 opciones:

A. Usa un control NumericUpDown

Si deseas crear un control que solo acepta numeros y no letras, lo primero que necesitas pensar es en el control NumericUpDown. Este control representa un controls de windows en el que se muestran exclusivamente valores numericos.

Puedes simplemente arrastrar y soltar este control desde la caja de controles a tu formulario:

NumericUpDown Control Winforms

O puedes agregarlo dinamicamente usando código:

// Crea un control numericupdown
NumericUpDown numbox = new NumericUpDown();
// Alguna locación en el formulario
numbox.Location = new Point(10, 50);
numbox.Visible = true;
// Agregar al formulario
Controls.Add(numbox);

Para obtener su valor puedes acceder simplemente al atributo Value del control, por ejemplo:

// Obtener valor numerico
decimal value = numericUpDown1.Value;

// Mostrar en una alerta
MessageBox.Show(value.ToString()); 

Nota que el valor retornado estará en tipo decimal, así que puedes darle un formato entero, cadena de texto lo que sea que necesites. Este campo por si mismo no permite de ninguna manera caractéres no numericos dentro.

B. Con una caja de texto

En caso de que no puedas usar un control numerico por alguna razón, como por ejemplo al usar un framework gráfico que solo ofrece cajas de texto estilizadas, puedes de todas maneras permitir que en este solo se puedan ingresar números manejando correctamente el evento KeyPress. Lo primero que necesitas hacer es agregar una función al evento KeyPress de la caja de texto simplemente agregando el evento con visual studio seleccionando tu caja de texto y luego en la caja de propiedades (esquina inferior derecha de VS), luego seleccionando la pestaña de eventos y clickeando 2 veces sobre el evento KeyPress:

Double Click KeyPress Event Textbox

Esto agregará automaticamente una función al evento keypress que estará vacía, así que necesitas modificarla con el siguiente código para prevenir que la caja de texto no pueda tener caracteres no numéricos:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    // Verificar que la tecla presionada no sea CTRL u otra tecla no numerica
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
    {
        e.Handled = true;
    }

    // Si deseas, puedes permitir numeros decimales (o float)
    // If you want, you can allow decimal (float) numbers
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
}

Para obtener su valor, necesitarías simplemente convertir la cadena de texto a número usando el tipo deseado:

string textboxValue = textBox1.Text;

// Obtener como decimal
decimal valueDec = decimal.Parse(textboxValue);

// Obtener como entero
int valueInt = Int32.Parse(textboxValue);

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable