Sunteți pe pagina 1din 31

1: Crear un proyecto y agregar etiquetas al formulario

Visual Studio 2010 El primer paso para crear una prueba matemtica es crear el proyecto y agregar etiquetas al formulario.

Para crear un proyecto y agregar etiquetas al formulario


1. En el men Archivo, haga clic en Nuevo proyecto. 2. Si no usa Visual Studio Express, primero debe seleccionar un lenguaje. En la lista Plantillas instaladas, seleccione C# o Visual Basic. 3. Haga clic en el icono Aplicacin de Windows Forms y, a continuacin, escriba el nombre Prueba matemtica. 4. Establezca las propiedades del formulario. a. Cambie la propiedad Text del formulario a Prueba matemtica. b. Cambie el tamao a 500 pxeles de ancho por 400 pxeles de alto mediante la propiedad Size o arrastre el mouse hasta que vea el tamao correcto en la esquina inferior izquierda del entorno de desarrollo integrado (IDE). c. Para evitar que los usuarios cambien el tamao del formulario, cambie la propiedad FormBorderStyle a Fixed3D y establezca la propiedad MaximizeBox en False. 5. Arrastre un control Label desde el cuadro de herramientas y, a continuacin, establezca sus propiedades: a. Cambie la propiedad (Name) propiedad a timeLabel. Esta etiqueta aparece como un cuadro en la esquina superior derecha del formulario, que muestra la cuenta atrs en segundos de la prueba. b. Cambie la propiedad AutoSize a False para poder modificar personalmente las dimensiones del cuadro. c. Cambie la propiedad BorderStyle a FixedSingle para dibujar una lnea alrededor del cuadro. d. Establezca la propiedad Size en 200, 30. e. Arrastre la etiqueta hacia la esquina superior derecha del formulario hasta que aparezcan las lneas azules de separacin. f. Borre la propiedad Text haciendo clic en Text en la ventana Propiedades y presionando la tecla RETROCESO. g. Cambie el tamao de fuente a 15,75. Haga clic en el signo ms que aparece junto a la propiedad Font en la ventana Propiedades, que muestra varias propiedades, incluida la propiedad Size, como se muestra en la siguiente imagen. Ventana Propiedades con el tamao de fuente

de 5

6. A continuacin, arrastre otro control Label desde el Cuadro de herramientas y establezca sus propiedades: a. Cambie el tamao de fuente a 15,75. b. Establezca la propiedad Text en Tiempo restante. c. Arrstrelo para alinearlo a la izquierda de la etiqueta timeLabel. 7. Ahora, agregue los controles para el problema de suma. Arrastre un control Label desde el cuadro de herramientas y, a continuacin, establezca sus propiedades: a. Establezca la propiedad Text en ? (signo de interrogacin). b. Establezca la propiedad AutoSize en False. c. Establezca la propiedad Size en 60, 50. d. Cambie el tamao de fuente a 18. e. Cambie la propiedad TextAlign a MiddleCenter. f. Cambie la propiedad Location a 75, 75 para colocarlo en el formulario. g. Cambie la propiedad (Name) propiedad a plusLeftLabel. 8. Seleccione la etiqueta plusLeftLabel y cpiela. (Presione Ctrl+C o bien seleccione Copiar en el men Edicin.) A continuacin, realice las acciones siguientes: a. Pguelo tres veces. (Presione Ctrl+V, o bien seleccione Pegar en el men Edicin.) b. Organice las tres nuevas etiquetas para que los cuadros estn en fila a la derecha de la etiqueta plusLeftLabel, utilizando las lneas de separacin para separarlas y alinearlas. c. Cambie la propiedad Text de la segunda etiqueta a + (signo ms). d. Cambie la propiedad (Name) de la tercera etiqueta a plusRightLabel. e. Cambie la propiedad Text de la cuarta etiqueta a = (signo igual). 9. Arrastre un control NumericUpDown desde el Cuadro de herramientas y, a continuacin, haga lo siguiente:

1: Crear un proyecto y agregar etiquetas al formulario

a. Cambie el tamao de fuente a 18 y, a continuacin, estrchelo para que el ancho sea 100. b. Arrstrelo hasta que se alinee con los controles Label del problema de suma. c. Cambie la propiedad (Name) a suma. (Aprenderemos ms cosas acerca del control NumericUpDown ms adelante.) Ahora, la prueba tiene una primera fila, como se muestra en la siguiente imagen. Primera fila de la prueba matemtica

10. Seleccione los cinco controles del problema de suma (los cuatro controles Label y el control NumericUpDown) y cpielos. A continuacin, realice las acciones siguientes: a. Pegue los controles, con lo que se deberan agregar cinco nuevos controles al formulario. b. Los controles deberan seguir estando seleccionados, de modo que pueda hacer clic en uno de ellos y arrastrarlos a su lugar para que queden alineados debajo de los controles de suma. Utilice las lneas de separacin para proporcionar una distancia suficiente entre las dos filas. c. Cambie la propiedad Text de la segunda etiqueta a - (signo menos). d. Cambie el nombre de la primera etiqueta del signo de interrogacin a minusLeftLabel. e. Cambie el nombre de la segunda etiqueta de signo de interrogacin a minusRightLabel. f. Cambie el nombre del control NumericUpDown a diferencia. 11. Pegue los cinco controlan dos veces ms y, a continuacin, haga lo siguiente: a. Para la tercera fila, cambie el nombre de la primera etiqueta a timesLeftLabel, cambie la propiedad Text de la segunda etiqueta a (signo de multiplicacin), cambie el nombre de la tercera etiqueta a timesRightLabel y cambie el nombre del control NumericUpDown a producto. b. Para la cuarta fila, cambie el nombre de la primera etiqueta a dividedLeftLabel, cambie la propiedad Text de la segunda etiqueta a (signo de divisin), cambie el nombre de la tercera etiqueta a dividedRightLabel y cambie el nombre del control NumericUpDown a cociente. Nota Puede copiar el signo de multiplicacin y el signo de divisin de este tutorial y pegarlos en el IDE.

de 5

12. Se necesita un control ms en el formulario: un botn para iniciar la prueba. Arrastre un control

Button desde el Cuadro de herramientas y, a continuacin, establezca sus propiedades: a. Establezca la propiedad (Name) en startButton. b. Establezca la propiedad Text en Iniciar la prueba. c. Establezca el tamao de fuente en 14. d. Establezca la propiedad AutoSize en True, para que el tamao del botn se ajuste automticamente al texto. e. Arrastre el botn hasta la parte inferior del formulario y muvalo para que quede centrado. 13. Por ltimo, haga clic en el control startButton y, a continuacin, haga lo siguiente: a. Establezca la propiedad TabIndex en 1. b. Haga clic en el control NumericUpDown de suma. c. Establezca la propiedad TabIndex en 2. d. Establezca los dems controles NumericUpDown: establezca la propiedad TabIndex del control de diferencia en 3, la propiedad TabIndex del control de producto en 4, y la propiedad TabIndex del control de cociente en 5. Ahora, el formulario debera tener un aspecto similar a la siguiente imagen. Formulario de prueba matemtica inicial

Nota La finalidad de la propiedad TabIndex es establecer el orden de los controles cuando el usuario presiona la tecla TAB. Abra cualquier cuadro de dilogo (por ejemplo, en el men Archivo, seleccione Abrir) y presione la tecla TAB varias veces. Observe cmo se mueve el cursor de un control a otro cada vez que se presiona la tecla TAB. Al disear este formulario originalmente, un programador decidi el orden.

14. Para ver cmo funciona la propiedad TabIndex, guarde el programa, ejectelo y, a continuacin, presione la tecla TAB varias veces.

o 2: Crear un problema de suma aleatoria

Visual Studio 2010 La prueba necesita problemas de matemticas. Si la prueba repite los mismos problemas, no supone ningn reto. Por ello, es interesante incluir nmeros aleatorios. Agregue un mtodo denominado StartTheQuiz() que rellena los problemas e inicia el temporizador de cuenta atrs. Para este paso, agregaremos un problema de suma aleatoria. Los dems problemas de matemticas y el temporizador de cuenta atrs se agregan en pasos posteriores de este tutorial. En el tutorial 2, hemos creado varios elementos SoundPlayer para un juego de laberinto. Para la prueba matemtica hacemos lo mismo, salvo que en lugar de la clase SoundPlayer, utilizaremos la clase Random.

Para crear un problema de suma aleatoria


1. Cree un objeto Random utilizando una instruccin new como la siguiente. C# public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random();

Ahora, hemos agregado un objeto Random al formulario y lo hemos denominado randomizer. Nota En el tutorial del laberinto, creamos dos componentes SoundPlayer mediante la instruccin new. Esto hace algo similar. La nica diferencia es que, al contrario que SoundPlayer, Random no es un componente ni un control, de modo que no podemos llamarlo as. Se denomina objeto. Probablemente habr odo la palabra objeto antes. Obtendr ms informacin sobre lo que significa en los prximos tutoriales. De momento, todo lo que necesita saber es que cuando el programa utiliza una instruccin new para crear botones, etiquetas, paneles, elementos OpenFileDialog, ColorDialog, SoundPlayer o Random, e incluso formularios, el elemento que se crea se denomina objeto. Los tutoriales posteriores muestran mucha ms informacin sobre cmo funcionan estos objetos.

2. Ahora, al iniciar el formulario, crea un nuevo objeto Random y le da el nombre randomizer. Como con los elementos SoundPlayer, si entramos en un mtodo y comenzamos a escribir randomizer con un punto (.) a continuacin, se abre una ventana IntelliSense que muestra todos los mtodos del objeto Random a los que se puede llamar. El mtodo Next() se utiliza como se indica a continuacin. Mtodo Next

de 5

Cuando se llama a random.Next(50), se obtiene un nmero aleatorio que es menor que 50 (del 0 al 49). 3. Pronto compilaremos un mtodo para comprobar las respuestas, de modo que el programa tiene que recordar qu nmeros ha elegido para los problemas. Agregue un valor de tipo integer (denominado valor de tipo int en C# o Integer en Visual Basic) denominado addend1 y otro denominado addend2 al formulario (igual que agreg el objeto Random denominado randomizer), como sigue. C# // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2;

Nota Un valor de tipo int (Integer) se utiliza para almacenar un valor numrico positivo o negativo. Puede contener cualquier nmero comprendido entre el -2147483648 y el 2147483647. Slo puede almacenar los nmeros enteros y no los decimales.

4. Luego, agregue un mtodo denominado StartTheQuiz() que utiliza el mtodo Next() del objeto Random para elegir dos nmeros y colocarlos en las etiquetas. Gradualmente ir rellenando todos los problemas e iniciar el temporizador, as que debe agregar un comentario. Debe tener este aspecto: C# /// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 =

o 2: Crear un problema de suma aleatoria randomizer.Next(51);

de 5

addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); } sum.Value = 0;

Nota Recuerde que ha llamado a randomizer.Next(51). El motivo de utilizar 51 y no 50 es que los dos nmeros sumen una respuesta que est comprendida entre el 0 y el 100. Si pasa 50 al mtodo Next(), elegir un nmero del 0 al 49, de modo que mayor respuesta posible sera 98, y no 100. Despus de ejecutarse las dos primeras instrucciones del mtodo, cada uno de los dos valores de tipo int (Integer), addend1 y addend2, contiene un nmero aleatorio del 0 al 50.

Fijmonos con ms atencin en estas instrucciones. C# plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString();

Las instrucciones establecen las propiedades Text de las dos etiquetas plus, plusLeftLabel y plusRightLabel, para que muestren los dos nmeros aleatorios. Hay que utilizar el mtodo ToString() del valor int (Integer) para convertirlo en texto (en programacin, string, o cadena, significa texto), porque los controles Label nicamente muestran texto, y no nmeros. 5. El botn de inicio debe iniciar la prueba. Para ello, vaya al Diseador de Windows Forms y haga doble clic en el botn, a fin de agregar un controlador de eventos Click. A continuacin, agregue las dos instrucciones siguientes. C# private void startButton_Click(object sender, EventArgs e) { startButton.Enabled = false; StartTheQuiz(); }

Ya sabe lo que hace la segunda instruccin: llama al nuevo mtodo StartTheQuiz(). La primera instruccin establece la propiedad Enabled del control startButton en False. Con ello se deshabilita el botn, de modo que el usuario no pueda hacer clic en l. De esta forma, el usuario puede hacer clic en el botn de inicio una sola vez. A continuacin, el botn aparece atenuado y no est disponible, y el usuario debe finalizar la prueba antes de que se agote el tiempo (o cerrar el programa). 6. Ahora, guarde y ejecute el programa. Haga clic en el botn de inicio. Debe aparecer un problema de suma aleatoria, como se muestra en la siguiente imagen.

o 2: Crear un problema de suma aleatoria

Problema de suma aleatoria

Contenido de la comunidad
Probablemente no sea un error de sintaxis
Ya que parece que el texto viene del ingls lo ms probable es que sea un error de traduccin, adems el ide te avisa donde hay un error ya que ese objeto o variable no existe de todas maneras

Error en el punto 4 del paso 2 (C#)


Nos indica que debemos incluir las siguientes lneas:
///<summary> /// Start the quiz by filling in all of the problems /// and starting the timer. ///</summary> publicvoid StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0;

Sin embargo el compilador al probar dice que hay un error en la inicializacin de "suma":
sum.Value = 0;

Se soluciona sustituyendo esta expresin por la correcta, ya que hemos llamado a la casilla "suma" y no "sum":
suma.Value = 0;

de 5

Visual Studio 2010 Como esta prueba tiene lmite de tiempo, vamos a agregar un temporizador de la cuenta atrs. Es preciso que el programa realice el seguimiento del nmero de segundos que quedan a medida que el juego progresa.

Para agregar un temporizador de cuenta atrs


1. Agregue un valor de tipo int (Integer) denominado timeLeft, como hemos hecho previamente. El cdigo debe tener un aspecto parecido al siguiente. C# public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2; // This int will keep track of the time left. int timeLeft;

2. Ahora, hay que agregar algo que cuente el tiempo de verdad, como un temporizador. Vaya al Diseador de Windows Forms y arrastre un control Timer del Cuadro de herramientas (en la categora Componentes) hasta el formulario. Aparecer en el rea gris de la parte inferior del Diseador de Windows Forms. 3. Haga clic en el icono timer1 que acaba de agregar y establezca la propiedad Interval en 1000. Esto hace que el evento Tick se desencadene cada segundo. A continuacin, haga doble clic en el icono para agregar el controlador de eventos Tick. El IDE cambiar al editor de cdigo y saltar al nuevo mtodo de control de eventos. Agregue las instrucciones siguientes. C# private void timer1_Tick(object sender, EventArgs e) { if (timeLeft > 0) { // Display the new time left // by updating the Time Left label. timeLeft = timeLeft 1; timeLabel.Text = timeLeft + " seconds"; } else {

3: Agregar un temporizador de cuenta atr?s

// If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; startButton.Enabled = true;

Segn lo que hemos agregado, cada segundo el temporizador comprobar si se ha agotado el tiempo. Para ello, comprueba si el valor de tipo int (Integer) de timeLeft es mayor que 0. Si lo es, queda tiempo. En primer lugar, el temporizador resta 1 a timeLeft y, a continuacin, actualiza la propiedad Text del control timeLabel para mostrar al usuario cuntos segundos quedan. Si no queda tiempo, el temporizador se detiene y cambia el texto del control timeLabel de modo que muestre que se agot el tiempo. Aparecer un cuadro de mensaje que indicar al usuario que la prueba ha finalizado. Se revela la respuesta. En este caso, se suman addend1 y addend2. La propiedad Enabled del control startButton se establece en true, para que botn vuelva a estar disponible. De ese modo, el usuario puede volver a empezar la prueba. Hemos agregado una instruccin if else, que es la manera de indicar a los programas que tomen decisiones. Una instruccin if else tiene el siguiente aspecto. VB If (something your program will check) Then ' statements that will get executed ' if the thing that the program checked is true Else ' statements that will get executed ' if the thing that the program checked is NOT true End If C# if (something your program will check) { // statements that will get executed // if the thing that the program checked is true } else { // statements that will get executed // if the thing that the program checked is NOT true } Vamos a fijarnos con ms atencin en la instruccin que hemos agregado en el bloque else, para mostrar la respuesta al problema de suma. C# sum.Value = addend1 + addend2;

Como probablemente sabr, addend1 + addend2 suma los dos valores.La primera parte (sum.Value) utiliza la propiedad Value del control NumericUpDown para mostrar la respuesta de 4

04/06/2012 10:45 a.m

correcta.La propiedad Value se utiliza de nuevo ms tarde, para comprobar las respuestas de la prueba. Un control NumericUpDown facilita al usuario la escritura de nmeros. Este es el motivo por el que se utiliza este control para las respuestas a los problemas de matemticas.Dado que todas las respuestas son nmeros del 0 al 100, se dejan las propiedades predeterminadas Minimum y Maximum establecidas en 0 y 100.Esto hace que el control nicamente permita al usuario escribir un nmero del 0 al 100.Como las respuestas solo pueden ser nmeros enteros, la propiedad DecimalPlaces se deja establecida en 0, lo que significa que el usuario no puede escribir decimales.(Si desea permitir que el usuario escriba 3,141 pero no 3,1415, podra establecer la propiedad DecimalPlaces en 3.) 4. Agregue tres lneas al final de mtodo StartTheQuiz(), de modo que el cdigo tenga este aspecto. C# /// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start();

Ahora, al empezar la prueba, establece el valor de tipo int (Integer) de timeLeft en 30 y cambia la propiedad Text del control timeLabel a 30 segundos. A continuacin, llama al mtodo Start() del control Timer para iniciar la cuenta atrs. (Todava no comprueba la respuesta, esto viene despus.) 5. Guarde y ejecute el programa. Al hacer clic en el botn de inicio, el temporizador debera iniciar la cuenta atrs. Cuando se agota el tiempo, la prueba finaliza y se muestra la respuesta. En la siguiente imagen se muestra la prueba en marcha. Prueba matemtica en marcha

3: Agregar un temporizador de cuenta atr?s

Para continuar o revisar


Para ir al siguiente paso del tutorial, vea Paso 4: Agregar el mtodo CheckTheAnswer() . Para volver al paso anterior del tutorial, vea Paso 2: Crear un problema de suma aleatoria .
2 1

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd492165.aspx 2http://msdn.microsoft.com/es-es/library/dd492147.aspx

Contenido de la comunidad
Problema de sum.Value (C#)
En el cdigo de los pasos 3 y 4 hay que sustituir la expresin:
sum.Value

por la correcta:
suma.Value

07/08/2010 Ivn Villa Snchez

2012 Microsoft. Reservados todos los derechos.

de 4

04/06/2012 10:45 a.m

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original.

Visual Studio 2010 Es preciso que la prueba compruebe si el usuario responde correctamente. Afortunadamente, escribir mtodos que realizan un clculo simple, como el mtodo CheckTheAnswer(), no es difcil. Nota Para quienes estn realizando este tutorial en Visual Basic, cabe destacar que, como este mtodo devuelve un valor, en lugar de la palabra clave Sub usual debern utilizar la palabra clave Function. Realmente es as de sencillo: las subrutinas no devuelven valores, las funciones, s.

Para agregar el mtodo CheckTheAnswer()


1. Agregue el mtodo CheckTheAnswer(), que suma addend1 y addend2, y comprueba si la adicin es igual al valor del control NumericUpDown de suma. Si la suma es igual, el mtodo devuelve true; si no, devuelve false. El cdigo debe tener un aspecto parecido al siguiente. C# /// <summary> /// Check the answer to see if the user got everything right. /// </summary> /// <returns>True if the answer's correct, false otherwise.</returns> private bool CheckTheAnswer() { if (addend1 + addend2 == sum.Value) return true; else return false; }

El programa debe llamar a este mtodo para comprobar si el usuario respondi correctamente. Para ello, se agrega if else a la instruccin. La instruccin tiene un aspecto parecido al siguiente. C# if (CheckTheAnswer()) { // statements that will get executed // if the answer is correct } else if (timeLeft > 0) { // statements that will get executed // if there's still time left on the timer }

o 4: Agregar el m?todo CheckTheAnswer()

(d=printer).aspx

else { }

// statements that will get executed if the timer ran out

2. Luego, se modifica el controlador de eventos Tick del temporizador para comprobar la respuesta. El nuevo controlador de eventos con comprobacin de respuesta debera incluir lo siguiente. C# private void timer1_Tick(object sender, EventArgs e) { if (CheckTheAnswer()) { // If the user got the answer right, stop the timer // and show a MessageBox. timer1.Stop(); MessageBox.Show("You got all the answers right!", "Congratulations"); startButton.Enabled = true; } else if (timeLeft > 0) { // Decrease the time left by one second and display // the new time left by updating the Time Left label. timeLeft; timeLabel.Text = timeLeft + " seconds"; } else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; startButton.Enabled = true; } }

Ahora, si el controlador de eventos del temporizador detecta que el usuario respondi correctamente, detiene el temporizador, muestra un mensaje de felicitacin y hace que el botn de inicio vuelva a estar disponible. 3. Guarde y ejecute el programa. Inicie el juego y escriba la respuesta correcta al problema de suma. Nota Al escribir la respuesta, puede que observe algo extrao en el control NumericUpDown. Si empieza a escribir sin seleccionar toda la respuesta, el cero no desaparece y hay que eliminarlo manualmente. Corregiremos esto ms adelante en este tutorial.

4. Al escribir la respuesta correcta, debe abrirse el cuadro de mensaje, detenerse el temporizador y

de 3

04/06/2012 10:45 a.m

volver a estar disponible el botn de inicio. Haga clic de nuevo en el botn de inicio para asegurarse de que suceda as.

Para continuar o revisar


Para ir al siguiente paso del tutorial, vea Paso 5: Agregar controladores de eventos Enter para 1 los controles NumericUpDown . Para volver al paso anterior del tutorial, vea Paso 3: Agregar un temporizador de cuenta atrs .
2

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd492138.aspx 2http://msdn.microsoft.com/es-es/library/dd492144.aspx

Contenido de la comunidad
2012 Microsoft. Reservados todos los derechos.

Agregar controladores de eventos Enter para los controles Numer...

(d=printer).aspx

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original.

Visual Studio 2010 Posiblemente se habr fijado en que al escribir nmeros en el control NumericUpDown sucede algo extrao. Para corregirlo, se agrega un controlador de eventos Enter.

Para ver el comportamiento del control NumericUpDown


1. Ejecute el programa e inicie el juego. El control NumericUpDown de la suma debera tener un cursor parpadeante en su interior junto al nmero 0 (cero). 2. Escriba 3: aparecer 30. Escriba 5: aparecer 350. Sin embargo, despus de un segundo cambiar a 100. Antes de corregir este problema, piense en lo que est sucediendo. Piense por qu el 0 no desapareci cuando escribi 3. Piense por qu 350 se ha cambiado por 100, y por qu se ha producido un retraso antes del cambio. Nota Aunque puede parecer un comportamiento extrao, hay una explicacin. Al hacer clic en el botn de inicio, la propiedad Enabled del botn est establecida en False; el botn aparece atenuado y no est disponible. El programa busca el control con el siguiente valor de TabIndex ms bajo, el control NumericUpDown de la suma, y cambia el foco a ese control. Cuando se presiona la tecla TAB para ir a un control NumericUpDown, el cursor se sita automticamente al principio del control; este es el motivo por el cual los nmeros que se escriben aparecen a la izquierda y no a la derecha. Cuando se escribe un nmero encima de la propiedad MaximumValue, que est establecida en 100, reemplaza el nmero escrito con el valor mximo.

Para agregar un controlador de eventos Enter para el control NumericUpDown


1. A fin de evitar este comportamiento extrao y facilitar el uso del programa, agregue un controlador para cada evento Enter de cada control NumericUpDown. Utilice la pgina Eventos del el cuadro de dilogo Propiedades para agregar un controlador de eventos Enter denominado answer_Enter para el control NumericUpDown de suma. Cuadro de dilogo Propiedades

de 3

04/06/2012 10:46 a.m

El cdigo debe tener este aspecto. C# private void answer_Enter(object sender, EventArgs e) { // Select the whole answer in the NumericUpDown control. NumericUpDown answerBox = sender as NumericUpDown; if (answerBox != null) { int lengthOfAnswer = answerBox.Value.ToString().Length; answerBox.Select(0, lengthOfAnswer); }

Aunque inicialmente parezca complejo, resulta ms fcil de entender si se examina paso a paso. En primer lugar, fjese en la parte superior del mtodo: object sender en C# o sender As System.Object en Visual Basic. Esto significa que dentro del mtodo, cada vez que se utiliza sender, hace referencia al control NumericUpDown cuyo evento Enter se desencadena. As que, en la primera lnea del mtodo, se especifica que no se trata de un simple objeto, sino que es concretamente un control NumericUpDown. (Cada control NumericUpDown es un objeto, pero no todos los objetos son un control NumericUpDown.) En la lnea siguiente se comprueba si se ha llevado a cabo correctamente la conversin (de tipos) de answerBox: de un objeto a un control NumericUpDown. Si la conversin de tipos no ha sido correcta, su valor sera null (C#) o Nothing (Visual Basic). En la tercer lnea se busca la longitud de la respuesta que se muestra actualmente en el control NumericUpDown. En la cuarta lnea se ordena al control NumericUpDown que seleccione la respuesta. Ahora, cuando el usuario navega al control, desencadena este evento, lo que provoca que se seleccione la respuesta. En cuanto el usuario empieza a escribir, se borra la respuesta anterior y se reemplaza con la nueva. 2. Una vez que se haya implementado este controlador de eventos, vaya al Diseador de Windows Forms y seleccione el control NumericUpDown de diferencia. Vaya a la pgina Eventos del cuadro de dilogo Propiedades, desplcese hacia abajo hasta el evento Enter y seleccione el controlador de eventos que acaba de agregar. 3. A continuacin, haga lo mismo para los controles NumericUpDown del producto y del cociente.

Agregar controladores de eventos Enter para los controles Numer...

(d=printer).aspx

4. Guarde y ejecute el programa. El comportamiento extrao ya no se debera producir.

Para continuar o revisar


Para ir al siguiente paso del tutorial, vea Paso 6: Agregar un problema de resta . Para volver al paso anterior del tutorial, vea Paso 4: Agregar el mtodo CheckTheAnswer() .
2 1

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd492142.aspx 2http://msdn.microsoft.com/es-es/library/dd492165.aspx

Contenido de la comunidad
2012 Microsoft. Reservados todos los derechos.

de 3

04/06/2012 10:46 a.m

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original.

Visual Studio 2010 Para agregar un problema de resta, necesita: resta. Generar nmeros aleatorios para el problema (y asegurarse de que la respuesta est comprendida entre 0 y 100). Actualizar el mtodo que comprueba las respuestas para que compruebe tambin el nuevo problema de resta. Actualizar el controlador eventos Tick del temporizador para que rellene la respuesta correcta cuando se agote el tiempo. Almacenar los valores de

Para agregar un problema de resta


1. En primer lugar, se necesita un lugar donde almacenar los valores, as que agregue dos valores de tipo int (Enteros) para el problema de resta al formulario. El nuevo cdigo aparece entre los enteros de suma y el entero del temporizador. El cdigo debe tener este aspecto. C# public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2; // These ints will store the numbers // for the subtraction problem. int minuend; int subtrahend; // This int will keep track of the time left. int timeLeft;

Nota Los nombres de los nuevos valores int (minuend y subtrahend, minuendo y sustraendo) no son trminos de Visual C#, ni siquiera trminos de programacin. Se trata de los nombres utilizados tradicionalmente en aritmtica para el nmero que se resta (el substraendo) y el nmero del que se resta (el minuendo). La diferencia es el minuendo menos el sustraendo. Puede utilizar otros nombres, porque el programa no requiere nombres especficos para los valores de tipo int,

o 6: Agregar un problema de resta (d=printer).aspx los controles, los componentes o los mtodos. Hay algunas reglas (por ejemplo, los nombres no pueden comenzar con dgitos), pero en general, podra utilizar nombres como x1, x2, x3, x4, etc.

de 5

04/06/2012 10:46 a.m

Sin embargo, sera difcil leer el cdigo y casi imposible realizar el seguimiento de los problemas. Ms adelante en este tutorial utilizaremos los trminos tradicionales para la multiplicacin (multiplicand multiplier = product, multiplicando multiplicador = producto) y la divisin (dividend divisor = quotient, dividendo divisor = cociente).

2. A continuacin, modifique el mtodo StartTheQuiz() para rellenar un problema de resta aleatorio. El nuevo cdigo aparece tras el comentario "Fill in the subtraction problem". El cdigo debe tener este aspecto. C# /// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0; // Fill in the subtraction problem. minuend = randomizer.Next(1, 101); subtrahend = randomizer.Next(1, minuend); minusLeftLabel.Text = minuend.ToString(); minusRightLabel.Text = subtrahend.ToString(); difference.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start();

Este cdigo utiliza el mtodo Next() de la clase Random de una forma algo distinta. Al darle dos valores, elige al azar uno que sea mayor o igual que el primero y menor que el segundo. La siguiente lnea elige un nmero aleatorio del 1 al 100 y lo almacena en el minuendo. C# minuend = randomizer.Next(1, 101);

Se puede llamar al mtodo Next() de la clase Random de varias formas. Cuando se puede llamar a un mtodo de ms de una manera, se denomina mtodo sobrecargado. Puede utilizar IntelliSense para explorar esta posibilidad. Fijmonos de nuevo en la informacin sobre herramientas de la ventana IntelliSense del mtodo Next(). Informacin sobre herramientas de la ventana IntelliSense

o 6: Agregar un problema de resta

(d=printer).aspx

Observe que la informacin sobre herramientas muestra (+ 2 sobrecargas). Esto significa que hay dos formas ms de llamar al mtodo Next(). Al escribir el nuevo cdigo para el mtodo StartTheQuiz(), puede ver ms informacin. En cuanto escriba randomizer.Next(, aparecer la ventana IntelliSense. Presione las teclas de direccin ARRIBA y ABAJO para recorrer cclicamente las sobrecargas, como se muestra en la siguiente imagen. Sobrecargas en la ventana IntelliSense

La de la imagen anterior es la que deseamos utilizar, porque permite especificar un valor mnimo y mximo. 3. Modifique el mtodo CheckTheAnswer() para que compruebe si la respuesta de la resta es correcta. El cdigo debe tener este aspecto. C# /// <summary> /// Check the answer to see if the user got everything right. /// </summary> /// <returns>True if the answer's correct, false otherwise.</returns> private bool CheckTheAnswer() { if ((addend1 + addend2 == sum.Value) && (minuend subtrahend == difference.Value)) return true; else return false; }

&& es el operador logical and de Visual C#. En Visual Basic, el operador equivalente es AndAlso. Equivale a decir, "Si addend1 ms addend2 es igual al valor de la suma NumericUpDown, y si el minuendo menos el sustraendo es igual al valor de la diferencia NumericUpDown". El mtodo CheckTheAnswer() devuelve true nicamente si el problema de suma es correcto y el problema de resta es correcto. de 5

04/06/2012 10:46 a.m

4. Cambie la ltima parte del controlador de evento Tick del temporizador de modo que rellene la respuesta correcta cuando se agote el tiempo. El cdigo debe tener este aspecto. C# else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; difference.Value = minuend subtrahend; startButton.Enabled = true; }

5. Guarde y ejecute el cdigo. Ahora, el programa deber incluir un problema de resta, como se muestra en la siguiente imagen. Cuestionario de matemticas con un problema de resta

Para continuar o revisar


Para ir al siguiente paso del tutorial, vea Paso 7: Agregar problemas de multiplicacin y divisin . Para volver al paso anterior del tutorial, vea Paso 5: Agregar controladores de eventos Enter para 2 los controles NumericUpDown .
1

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd492175.aspx 2http://msdn.microsoft.com/es-es/library/dd492138.aspx

Contenido de la comunidad

o 6: Agregar un problema de resta

(d=printer).aspx

2012 Microsoft. Reservados todos los derechos.

de 5

04/06/2012 10:46 a.m

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original.

Visual Studio 2010 Antes de comenzar este procedimiento, piense en cmo agregar los problemas de multiplicacin y divisin. Piense en el paso inicial, que requiere almacenar valores.

Para agregar problemas de multiplicacin y divisin


1. Agregue cuatro valores de tipo int (Integer) al formulario. El cdigo debe tener este aspecto. C# public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers for the addition problem. int addend1; int addend2; // These ints will store the numbers for the subtraction problem. int minuend; int subtrahend; // These ints will store the numbers for the multiplication problem. int multiplicand; int multiplier; // These ints will store the numbers for the division problem. int dividend; int divisor; // This int will keep track of the time left. int timeLeft;

2. Al igual que antes, modifique el mtodo StartTheQuiz() para rellenar problemas de multiplicaciones y divisiones aleatorias. El cdigo debe tener este aspecto. C# /// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString();

7: Agregar problemas de multiplicaci?n y divisi?n

(d=printer).aspx

plusRightLabel.Text = addend2.ToString(); sum.Value = 0; // Fill in the subtraction problem. minuend = randomizer.Next(1, 101); subtrahend = randomizer.Next(1, minuend); minusLeftLabel.Text = minuend.ToString(); minusRightLabel.Text = subtrahend.ToString(); difference.Value = 0; // Fill in the multiplication problem. multiplicand = randomizer.Next(2, 11); multiplier = randomizer.Next(2, 11); timesLeftLabel.Text = multiplicand.ToString(); timesRightLabel.Text = multiplier.ToString(); product.Value = 0; // Fill in the division problem. divisor = randomizer.Next(2, 11); int temporaryQuotient = randomizer.Next(2, 11); dividend = divisor * temporaryQuotient; dividedLeftLabel.Text = dividend.ToString(); dividedRightLabel.Text = divisor.ToString(); quotient.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start();

3. Modifique el mtodo CheckTheAnswer() para que tambin compruebe los problemas de divisin y multiplicacin. El cdigo debe tener este aspecto. C# /// <summary> /// Check the answer to see if the user got everything right. /// </summary> /// <returns>True if the answer's correct, false otherwise.</returns> private bool CheckTheAnswer() { if ((addend1 + addend2 == sum.Value) && (minuend subtrahend == difference.Value) && (multiplicand * multiplier == product.Value) && (dividend / divisor == quotient.Value)) return true; else return false; }

Nota

de 4

04/06/2012 10:47 a.m

Dado que no hay ninguna manera simple de escribir el signo de multiplicacin () y el signo de divisin () mediante el teclado, Visual C# y Visual Basic utilizan el asterisco (*) para la

7: Agregar problemas de multiplicaci?n y divisi?n

(d=printer).aspx

multiplicacin y la barra diagonal (/) para la divisin.

4. Cambie la ltima parte del controlador de evento Tick del temporizador de modo que rellene la respuesta correcta cuando se agote el tiempo. El cdigo debe tener este aspecto. C# else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; difference.Value = minuend subtrahend; product.Value = multiplicand * multiplier; quotient.Value = dividend / divisor; } startButton.Enabled = true;

5. Guarde y ejecute el programa. Ahora, hay que responder a cuatro problemas para completar la prueba, como se muestra en la siguiente imagen. Prueba matemtica con cuatro problemas

Para continuar o revisar


Para ir al siguiente paso del tutorial, vea Paso 8: Probar otras caractersticas . Para volver al paso anterior del tutorial, vea Paso 6: Agregar un problema de resta .
2 1

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd492174.aspx 2http://msdn.microsoft.com/es-es/library/dd492142.aspx de 4

04/06/2012 10:47 a.m

Contenido de la comunidad
2012 Microsoft. Reservados todos los derechos.

o 8: Probar otras caracter?sticas

(d=printer).aspx

Este artculo se tradujo de forma manual. Mueva el puntero sobre las frases del artculo para ver el texto original.

Visual Studio 2010 Piense en cmo el programa crea un problema de divisin aleatoria. Piense por qu el programa no crea un problema en que la respuesta sea una fraccin. Para aprender ms, intente cambiar el color del control timeLabel y proporcionar al usuario alguna sugerencia.

Para probar otras caractersticas


Cambie el color del control timeLabel a rojo cuando al usuario no le queden ms que cinco segundos, estableciendo su control BackColor (timeLabel.BackColor = Color.Red;). Restablezca el color cuando la prueba haya terminado. Proporcione al usuario una sugerencia reproduciendo un sonido cuando especifique una respuesta correcta en uno de los controles NumericUpDown. (Tendr que escribir un controlador de eventos para el evento ValueChanged de cada control, que se desencadena cada vez que el usuario cambia el valor del control.)

Para continuar o revisar


Para ir al siguiente tutorial, vea Tutorial 4: Crear un juego de formar parejas . Para volver al paso anterior del tutorial, vea Paso 7: Agregar problemas de multiplicacin 2 y divisin .
1

Tabla de vnculos
1http://msdn.microsoft.com/es-es/library/dd553235.aspx 2http://msdn.microsoft.com/es-es/library/dd492175.aspx

Contenido de la comunidad
2012 Microsoft. Reservados todos los derechos.

1 de 1

04/06/2012 10:47 a.m

S-ar putea să vă placă și