Últimamente he estado algo flojo en cuanto a programación, hace mucho que no lo hago y empezare a recuperar el tiempo perdido, comenzare con C# en Visual Studio 2010 del que no se mucho y con algo sencillo como una calculadora simple, después podre ir mejorando mis proyectos.
Mostrare el código utilizado y también dejare el proyecto completo terminado al final del post.
Para comenzar, con este esquema donde se muestran los elementos de la ventana que utilice como los botones y en este caso utilice 2 pantallas o TextBox.
Lo primero es añadir los elementos y organizarlos como queramos que se vea nuestra calculadora y darle nombre a nuestros elementos para no confundirlos en este caso nombre a los botones bt1 al botón con el numero 1, bt2, bt3, btsum, etc., a la pantalla principal la nombre Pantalla y a la otra donde se muestran las operaciones que se van haciendo la nombre Previo.
Ahora una breve explicación de lo que queremos que haga nuestra calculadora tomando como referencia la calculadora de windows.
Cuando abrimos la calculadora lo primero que vemos es que en la pantalla de inicio nos muestra el numero cero.
Botones numéricos. al iniciar la calculadora y apretar el numero cero, no pasa nada hasta que presionamos otro numero se borra el cero de inicio y entonces podemos poner el numero que queramos.
Botón del punto decimal, solo queremos que el punto se imprima en pantalla una sola vez como debe de ser.
Botones de operación. si lo primero que hacemos al iniciar la calculadora es presionar uno de estos números entonces se tomara al cero de inicio como primer valor para la operación.
También tenemos dos estados, por decirlo de alguna manera, de estos botones, primero cuando se utilizan pro primera vez, es decir, la primera vez que presionemos cualquiera de estos botones, y segundo, cuando ya hemos hecho una operación nos muestre el resultado automáticamente.
Botón de igualdad. también puse dos estados, el primero que realiza la operación correspondiente y el segundo que muestra el resultado según el segundo numero introducido de forma automática al seguir presionando este botón. Eje. 2 + 1 = 3, si seguimos presionando el botón de igual nos mostrara el valor del resultado + 1 que es el segundo valor que introdujimos.
Botones de borrado que conocemos bien, el botón C nos borra absolutamente todo, pantalla y variables, todo lo regresa al estado de inicio, y el botón CE que solamente nos limpia la pantalla actual y la devuelve a cero.
Tambien se utilizan funciones en el menuStrip, es este proyecto solo tres menus:
Archivo --> Cerrar. Lo que hacer es cerrar la aplicación.
Editar. Aquí tenemos las funciones de Copiar y Pegar lo que esta en pantalla.
Ayuda --> Acerca de... Una breve explicación del proyecto, versión y demás información que queramos poner, yo lo puse en un nuevo form al que llamo desde este menú.
Dicho lo anterior vamos a lo que nos interesa comenzare por las variables.
bool ceroinicial = true; //para controlar el cero que tiene la calculadora al iniciar bool pdecimal = true; //para controlar el punto decimal bool op = true; //para controlar el resultado cuando se presiona cada signo aritmetico bool igual = true; //para controlar el estado del boton de igualdad string operacion; //variable usada en el case de la igualdad double numero1 = 0; //variable para el primer valor double numero2 = 0; //variabla para el segundo valor double temp = 0; //variable para el resultado
Ahora vamos con los botones numéricos.
if (ceroinicial) { txtPantalla.Text = " "; txtPantalla.Text = "1"; ceroinicial = false; } else { txtPantalla.Text = txtPantalla.Text + "1"; }
Ese código va para los números del 1 al 9, ya que el cero se comporta diferente y el código va como sigue.
if (txtPantalla.Text == "0") { } else { if (ceroinicial) { txtPantalla.Text = " "; txtPantalla.Text = "0"; ceroinicial = false; } else { txtPantalla.Text = txtPantalla.Text + "0"; } }
El punto decimal.
if (ceroinicial) //cuando el punto es el primer boton que presionas { txtPantalla.Text = " "; txtPantalla.Text = "0"; ceroinicial = false; } if (pdecimal) // cuando no hay punto en pantalla imprime el punto, de lo contrario no hace nada { txtPantalla.Text = txtPantalla.Text + "."; pdecimal = false; }
Seguimos con las operaciones básicas.
Suma.
ceroinicial = true; pdecimal = true; if (op) //Guarda primer valor en variable al presionar el boton suma por primera vez { numero1 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " + "; op = false; } else //Muestra el resultado al presionar el boton suma por segunda ocacion { numero2 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " + "; switch (operacion) { case "+": temp = numero1 + numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "-": temp = numero1 - numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "*": temp = numero1 * numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "/": if (numero2 == 0) { txtPantalla.Text = "Error"; break; } else { temp = numero1 / numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; } } } operacion = "+";
Resta
ceroinicial = true; pdecimal = true; if (op) //Guarda primer valor en variable al presionar el boton resta por primera vez { numero1 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " - "; op = false; } else //Muestra el resultado al presionar el boton resta por segunda ocacion { numero2 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " - "; switch (operacion) { case "+": temp = numero1 + numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "-": temp = numero1 - numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "*": temp = numero1 * numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "/": if (numero2 == 0) { txtPantalla.Text = "Error"; break; } else { temp = numero1 / numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; } } } operacion = "-";
Multiplicación
ceroinicial = true; pdecimal = true; if (op) //Guarda primer valor en variable al presionar el boton multiplicar por primera vez { numero1 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " * "; op = false; } else //Muestra el resultado al presionar el boton multiplicar por segunda ocacion { numero2 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " * "; switch (operacion) { case "+": temp = numero1 + numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "-": temp = numero1 - numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "*": temp = numero1 * numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "/": if (numero2 == 0) { txtPantalla.Text = "Error"; break; } else { temp = numero1 / numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; } } } operacion = "*";
División. Sabemos que no se puede dividir entre cero.
ceroinicial = true; pdecimal = true; if (op) //Guarda primer valor en variable al presionar el boton division por primera vez { numero1 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " / "; op = false; } else //Muestra el resultado al presionar el boton division por segunda ocacion { numero2 = double.Parse(txtPantalla.Text); txtPrevio.Text = txtPrevio.Text + txtPantalla.Text + " / "; switch (operacion) { case "+": temp = numero1 + numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "-": temp = numero1 - numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "*": temp = numero1 * numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; case "/": if (numero2 == 0) { txtPantalla.Text = "Error"; break; } else { temp = numero1 / numero2; txtPantalla.Text = temp.ToString(); numero1 = double.Parse(txtPantalla.Text); break; } } } operacion = "/";
Botón de igualdad
//devuelve las variables a su estado inicial ceroinicial = true; pdecimal = true; op = true; if (igual) // realiza la operacion correspondiente si es la primeravez que se presiona el boton { numero2 = double.Parse(txtPantalla.Text); switch (operacion) { case "+": txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; temp = numero1 + numero2; txtPantalla.Text = temp.ToString(); break; case "-": txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; temp = numero1 - numero2; txtPantalla.Text = temp.ToString(); break; case "*": txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; temp = numero1 * numero2; txtPantalla.Text = temp.ToString(); break; case "/": if (numero2 == 0) { txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; txtPantalla.Text = "Error"; break; } else { txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; temp = numero1 / numero2; txtPantalla.Text = temp.ToString(); break; } } igual = false; } else //Realiza la operacion correspondiente al seguir presionando el boton { switch (operacion) { case "+": temp = temp + numero2; txtPantalla.Text = temp.ToString(); break; case "-": temp = temp - numero2; txtPantalla.Text = temp.ToString(); break; case "*": temp = temp * numero2; txtPantalla.Text = temp.ToString(); break; case "/": if (numero2 == 0) { txtPrevio.Text = txtPrevio.Text + txtPantalla.Text; txtPantalla.Text = "Error"; break; } else { temp = temp / numero2; txtPantalla.Text = temp.ToString(); break; } } } txtPrevio.Text = " "; //limpia la pantalla Previo
Boton C
ceroinicial = true; pdecimal = true; operacion = null; op = true; igual = true; numero1 = 0; numero2 = 0; temp = 0; txtPrevio.Text = " "; txtPantalla.Text = "0";
Boton CE
ceroinicial = true; pdecimal = true; txtPantalla.Text = "0";
Para cerrar la aplicación desde el menú salir.
Application.Exit();
Para copiar al portapapeles.
Clipboard.SetDataObject(txtPantalla.Text);
Para pegar del portapapeles.
txtPantalla.Text = " "; //Limpiar pantalla primero txtPantalla.Paste(); //Pegar del portapapeles
Para llamar a otro form, acerca de...
Form2 frm = new Form2(); frm.Show(); //llamar a otro form
Para cerrar el nuevo formulario sin cerrar la aplicación.
this.Close(); //cerrar form2
Con este código agregamos un link a una web con LinkLabel.
System.Diagnostics.Process.Start("http://jaguarnegro18.blogspot.com/"); //Linklabel
Quizás mucho código, falta la creación de una estructura para no tener el mismo código por ejemplo en cada signo de operación y solo llamarlo una sola vez, pero eso lo haré mas adelante, junto con las funciones de una calculadora científica, por el momento esta creo que funcional con las 4 operaciones básicas.
Dejo el proyecto para descargar, tal como lo tengo yo.
Me podrías mandar el proyecto a mi correo, ya que no lo puedo bajar, me sería de mucha utilidad.
ResponderEliminarDe antemano, muchas gracias.
Te dejo mi correo: lanakma@gmail.com
Disculpa amigo no se puede bajar... Podrias enviarlo a mi correo?... Te lo agradecere muchisimo....
ResponderEliminarQue tal acuafrank revise el enlace y funciona bien solo dale click donde dice slow download y si sigue sin funcionarte me aviasas para enviartelo, porque por ahora no tengo mucho tiempo
ResponderEliminarMuy bueno amigo muy bien explicado y aparte de diferente manera. gracias
ResponderEliminarBuen proyecto, solo que si me podrías mandar el proyecto a mi mail porfa, por que no puedo bajarlo.. Saludos y gracias
ResponderEliminarcarita1206@hotmail.com
buen proyecto man... porfavor me podias enviarlo a mi correo es que no se puede descargar porfa... este es mi correo jolteon_10@hotmail.com
ResponderEliminar