martes, 10 de mayo de 2011

Promedio de numeros en C#

para explicarles en un ejemplo mas practico de como utilizar los eventos del textbox, vamos a hacerr una pequeña aplicacion la cual permita ingresar 3 notas entre 0 y 20 y al pulsar el boton Calcular nos va promediar las 3 notas ingresadas en un cuarto TextBox, el formulario es el siguiente:
para darle una mejor apariencia al cargar el formulario vamos a elegir en la Propiedad StartPosicion CenterScreen para que el formulario cargue en el centro de nuestra pantalla ya sea en cualquier resolucion, tambien se podria hacer por coordenadas pero esta propiedad lo hace mejor y mas rapido:



ahora en los 3 textbox vamos a la Propiedad MaxLenght y vamos a poner 2 para evitar que se escriban numeros como 100, 200 los cuales no son admitidos en esta aplicacion que solo va a permitir notas entre 0 y 20:
ahora dado que los 3 textbox van a validar numeros vamos a poner este codigo para que lo escriban en el evento KeyPress:
if (e.KeyChar >= 48 && e.KeyChar <= 57)//estos son los valores ASCII admitidos x ser numeros
{
}
else if (e.KeyChar == (char)(Keys.Enter))//aqui controlamos la pulsacion del Enter
{
    if (textBox1.Text == string.Empty || textBox1.Text == "")//aqui validamos si el textbox esta vacio
   {
      MessageBox.Show("No se permite campo vacio");
      e.Handled = true;
      this.ActiveControl = textBox1;//aqui forzamos a mantener el foco activo en el textbox
      return;
    }
   else
   {
     this.ActiveControl = textBox2;//si se ingreso los numeros, pasa el foco al textbox2
   }
}
else
{
    MessageBox.Show("Solo se permiten numeros");
    e.Handled = true;
    return;
}

este codigo lo vamos a escribir 3 veces para TextBox1_KeyPress, TextBox2_KeyPress y para TextBox3_KeyPress.
ojo fijense cuando lo copien de cambiar la propiedad ActiveControl la cual va a cambiar de acuerdo al textbox que lo pongan, por ejemplo para el textbox3 el segundo ActiveControl tendran que poner un button ya que al dar enter se espera que el boton se active.
Ahora para controlar el ingreso de numeros menores a 20 vamos a utilizar otro evento del Textbox, el cual va a ser TextChanged.

ahora en este evento vamos a escribir este codigo:

private void textBox1_TextChanged(object sender, EventArgs e)
{
  if (textBox1.Text.Length == textBox1.MaxLength)
  {
     if (Convert.ToInt32(textBox1.Text) > 20)//aqui validamos numeros mayores a 20
    {
MessageBox.Show("La Nota es entre 0 y 20", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
      this.textBox1.Clear();
      this.ActiveControl = this.textBox1;
    }
    else
   {
   }
}
else if (textBox1.Text.Length == 1)
{
    if (textBox1.Text[0] == '0')//aqui impedimos que se ingresen numeros con 0 a la izquierda
   {
      textBox1.Clear();
   }
}
}

ahora en el boton calcular solo ponen este codigo y listo...
int a, b, c;
double promedio;
a = int.Parse(textBox1.Text);
b = int.Parse(textBox2.Text);
c = int.Parse(textBox3.Text);
promedio= (a+b+c)/3;
textBox4.Text = promedio.ToString();
if (promedio > 10.5)
{
textBox4.ForeColor = Color.Blue;
}
else
{
textBox4.ForeColor = Color.Red;
}
 
con esto al escribir las notas les aparecera asi:
 
espero les haya servido..

1 comentario:

  1. porque no usas promedio sin coma (ddecimal o double)..??. ejemplo poner notas.. 1+7+10+ 7=25 / 4= 6,25....

    ResponderEliminar