Principales respuestas
Generar número automaticamente

Pregunta
-
Buenas tardes, estoy intentando que a través de un botón me sume un número de 1 en 1 y lo muestre en un label, pero me dice que la operación aritmética provoca desbordamiento.
En el evento click del botón le pongo lo siguiente,
Dim a As Integer = 1
Do
a = a + 1
Loop
Label12.Text = aEstaría bien así o como es la mejor manera de hacerlo.
Gracias por vuestra ayuda
óscar marés
Respuestas
-
Hola oscar marés,
Lo que pasa es que estás realizando un loop infinito, si te das cuenta dentro del Do-Loop incrementas la variable +1 pero nunca le dices cuando va a acabar (te falta agregar Loop Until a > algúnNumero), y claro está que este se ejecutará hasta que se produzca un desbordamiento de memoria como te está indicando.
Instrucción Do...Loop (Visual Basic)
Podrías ayudarte con un While.
Dim num As Integer = 1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Mientras la variable "num" sea menor a 20 ejecutamos lo siguiente While num < 20 'Incrementamos el valor de la variable num += 1 'Asignamos el valor al Label Label12.Text = num.ToString() 'Aplicamos un pausa de 100 milisegundos para poder verlo Thread.Sleep(100) Application.DoEvents() End While End Sub
Pruébalo y comentas como te va.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Joyce_ACModerator lunes, 13 de marzo de 2017 21:07
-
Sería conveniente que leas la parte teórica del aporte y no sólo te concentres en el código adjunto.
Mencioné que la variable debes declararla a nivel de clase, al declarar la variable 'a' dentro del evento Load la variable tiene un ámbito de método por tanto no es visible dentro del evento clic del botón.
Public Class Form1 'Clase Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '... End Sub Dim a As Integer = 0 'Variable declarada a nivel de la clase Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnBorrar.Click a += 1; Label1.Text = a.ToString End Sub End Sub
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Joyce_ACModerator lunes, 13 de marzo de 2017 21:09
Todas las respuestas
-
Obtienes la excepción 'OverFlowException' porque no estableces un limite (condición) para la cantidad de veces que se incrementará en una unidad la variable 'a', por tanto provocas desbordamiento.
Por ejemplo, si deseas incrementar en una unidad la variable 'a' puedes utilizar la siguiente instrucción:
Dim a As Integer = 0 Do While a < 10 a = a + 1 'Forma reducida: a += 1; MessageBox.Show(a.ToString) Loop
Sin embargo, si lo que buscas es incrementar la variable 'a' por cada vez que se produce el evento clic de un botón entonces debes declarar la variable a nivel de clase, por ejemplo:
Dim a As Integer = 0 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click a += 1; 'Se incrementa en una unidad la variable a Label12.Text = a.ToString End Sub
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joel C. Naupa Crispín sábado, 11 de marzo de 2017 19:08
- Votado como útil Joyce_ACModerator lunes, 13 de marzo de 2017 21:09
-
-
-
Hola oscar marés,
Lo que pasa es que estás realizando un loop infinito, si te das cuenta dentro del Do-Loop incrementas la variable +1 pero nunca le dices cuando va a acabar (te falta agregar Loop Until a > algúnNumero), y claro está que este se ejecutará hasta que se produzca un desbordamiento de memoria como te está indicando.
Instrucción Do...Loop (Visual Basic)
Podrías ayudarte con un While.
Dim num As Integer = 1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Mientras la variable "num" sea menor a 20 ejecutamos lo siguiente While num < 20 'Incrementamos el valor de la variable num += 1 'Asignamos el valor al Label Label12.Text = num.ToString() 'Aplicamos un pausa de 100 milisegundos para poder verlo Thread.Sleep(100) Application.DoEvents() End While End Sub
Pruébalo y comentas como te va.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Joyce_ACModerator lunes, 13 de marzo de 2017 21:07
-
-
Lo que en realidad quiero es generar un número de ticket cada vez que le de a nuevo pedido, por eso no quería darle un tope, pero me guardo tu código que seguro que me hará falta algún día y es bueno tener donde fijarte.
Muchas gracias!
Por cierto, como podéis ver soy muy nuevo en esto. ¿Cómo puedo hacer a la hora de guardar en una bd access el número de ticket sólo una vez? que no se repita tantas veces como valores introduzco en la bd desde un datagrid.
Gracias de nuevo.
óscar marés
-
Sería conveniente que leas la parte teórica del aporte y no sólo te concentres en el código adjunto.
Mencioné que la variable debes declararla a nivel de clase, al declarar la variable 'a' dentro del evento Load la variable tiene un ámbito de método por tanto no es visible dentro del evento clic del botón.
Public Class Form1 'Clase Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '... End Sub Dim a As Integer = 0 'Variable declarada a nivel de la clase Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnBorrar.Click a += 1; Label1.Text = a.ToString End Sub End Sub
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Joyce_ACModerator lunes, 13 de marzo de 2017 21:09
-