Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: JValero en 09 de Septiembre 2014, 15:59
-
Hola otra vez,
En el ejercicio 6 me solicitan llevar a cabo un programa que realice el cálculo del area de un rectángulo y me abra una ventana facilitando el resultado y dandome la opción a realizar un nuevo cálculo o a cerrar la aplicación.
No tengo problemas en cerrar la aplicación y que el programa me muestre un mensaje de despedida pero no consigo que me de la opción de volver a calcular un nuevo area.
- ¿Dónde está el error? ¿Qué tendría que añadir?
Option Explicit
Dim Base As Integer
Dim Altura As Integer
Dim Area As Integer
Dim Aceptacion As Integer
Private Sub Command1_click()
Base = Text1
Altura = Text2
Aceptacion = vbYes
Do While Aceptacion = vbYes
Text1 = ""
Text2 = ""
Area = Base * Altura
Aceptacion = MsgBox("El area del rectángulo es de " & Area & " centímetros cuadrados" & vbCrLf & "¿Quieres calcular otro area?", vbYesNo, "Calculo de area")
Loop
If Aceptacion = vbNo Then
MsgBox ("Gracias por utilizar el programa")
End If
Gracias por vuestra ayuda y colaboración.
Saludos.
-
El problema parece estar en la peculiaridad de Visual Basic en cuanto a la petición de datos en comparación con otros lenguajes (en otros lenguajes al pedir un dato se detiene el programa, y en el caso de estar dentro de un bucle, el bucle se detiene). Con visual Basic si introduces los datos con un textBox no hay detención del programa y si estás dentro de un bucle el bucle no se detiene.
Para forzar la petición del dato con detención de la ejecución evitando que se genere un bucle donde no puedes introducir los datos nuevamente puedes probar a utilizar inputbox (forma de pedir datos que sí da lugar a la detención del programa).
El código sería similar a esto (no lo he probado, pero guíate por la idea y haz pruebas tú mismo):
Option Explicit
Dim Base As Integer
Dim Altura As Integer
Dim Area As Integer
Dim Aceptacion As Integer
Private Sub Command1_click()
Aceptacion = vbYes
Do While Aceptacion = vbYes
Base = InputBox("Introduzca la base del rectángulo en cm", "Dato base")
Altura = InputBox("Introduzca la altura del rectángulo en cm", "Dato altura")
Area = Base * Altura
Aceptacion = MsgBox("El area del rectángulo es de " & Area & " centímetros cuadrados" & vbCrLf & "¿Quieres calcular otro area?", vbYesNo, "Calculo de area")
Loop
If Aceptacion = vbNo Then
MsgBox ("Gracias por utilizar el programa")
End If
End Sub
Como ves he prescindido de textbox, y la petición de datos comenzaría una vez se pulse el botón.
Otra opción que tienes es meter el código dentro de Private Sub Form Load, con lo cual directamente empezará la petición de datos sin tener que pulsar un botón. De ambas maneras (teniendo que pulsar un botón o sin tener que pulsarlo) la idea es que se ejecute un bucle cierto número de veces hasta que el usuario decida terminar.
Creo que con lo expuesto puedes intentar resolverlo.
Saludos
-
Gracias de nuevo Alex...
Te estoy dando trabajo ;)