elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.  (Leído 10,976 veces)
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« en: 1 Agosto 2013, 15:51 pm »

Hola buenas, pues este error sucede cuando hago un Progress Bar falso:

Código
  1. Dim WithEvents Timer1 As New Timer With {.Interval = 1}
  2.  
  3.    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  4.        Timer1.Enabled = True
  5.    End Sub
  6.  
  7.    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  8.        ProgressBar1.Value += 1
  9.    End Sub

Estoy intentando entender los procesos y eventos del progress bar, y por lo que me parece, es cosa del Tick del Timer1 que al tener un Interval tan reducido se come por completo el Value del Progress Bar (es como si no le diese tiempo a escribir 1 en el mismo Tick y escribese 2 o más "1" en el Value del PB)...

Que puedo hacer? A parte de aumentarle el Interval? :huh:

Un saludo.


« Última modificación: 1 Agosto 2013, 15:52 pm por Ikillnukes » En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #1 en: 1 Agosto 2013, 16:15 pm »

Estoy intentando entender

Pues te lo explico de forma sencilla:

La barra de progreso tiene un rango, ese rango se utiliza para medir el progreso (llenar la barra), no puedes aumentar el valor infinítamente porque sinó la barra de progreso no sabría cuando se debe rellenar por completo... es obvio.

El rango por defecto es de 0-100, NUNCA puedes sobrepasar ese rango (por eso te salta error), pero si que puedes modificar el rango, por ejemplo de 0 a 10, o de 5 a 50, eso depende de tus necesidades (Leete las propiedades del control para ver la propiedad que debes modificar...).

Esto sería la solución a lo que intentas hacer:

Código
  1. Public Class Form1
  2.  
  3.    Dim WithEvents Timer1 As New Timer With {.Interval = 10, .Enabled = True}
  4.  
  5.    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  6.        InfiniteProgressBar(ProgressBar1)
  7.    End Sub
  8.  
  9.    Private Sub InfiniteProgressBar(ByVal ProgressBar As ProgressBar, _
  10.                                    Optional value As Int32 = 1)
  11.  
  12.        Select Case ProgressBar.Value
  13.  
  14.            Case Is < ProgressBar.Maximum
  15.                ProgressBar.Value += value
  16.            Case Is >= ProgressBar.Maximum ' Si el valor es igual o mayor que el valor máximo del rango...
  17.                ProgressBar.Value = ProgressBar.Minimum ' Seteamos el valor mínimo (0) a la barra de progreso...
  18.  
  19.        End Select
  20.  
  21.    End Sub
  22.  
  23. End Class


« Última modificación: 1 Agosto 2013, 16:50 pm por EleKtro H@cker » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #2 en: 1 Agosto 2013, 18:56 pm »

Lol, ahora no me salta ninguna Excepción, pero cuando llega a su tope vuelve a empezar XD Voy a ver las properties del Progress Bar y te cuento. :laugh:
En línea


Interesados hablad por Discord.
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #3 en: 1 Agosto 2013, 19:06 pm »

Lol, ahora no me salta ninguna Excepción, pero cuando llega a su tope vuelve a empezar XD Voy a ver las properties del Progress Bar y te cuento. :laugh:


 :huh:
Creo que el nombre del método InfiniteProgressBar no dice mucho.

y esto tampoco.

Código
  1. Case Is >= ProgressBar.Maximum ' Si el valor es igual o mayor que el valor máximo del rango...
  2.                ProgressBar.Value = ProgressBar.Minimum ' Seteamos el valor mínimo (0) a la barra de progreso...
  3.  
En línea

abc
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #4 en: 1 Agosto 2013, 19:22 pm »

No digo que no sea incorrecto, lo único que no llega al tope de la barra (es decir se queda a la mitad y vuelve a empezar, antes me saltaba una excepción cuando llegaba a ese punto... ) :P
PD: Sigo haciendo hincapié en que es problema del Timer... :P

A lo mejor, si lo con un Do Until... :P Ara pruebo a ver.. ;)
En línea


Interesados hablad por Discord.
1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #5 en: 1 Agosto 2013, 19:35 pm »

Lol, ahora no me salta ninguna Excepción, pero cuando llega a su tope vuelve a empezar XD Voy a ver las properties del Progress Bar y te cuento. :laugh:

No digo que no sea incorrecto, lo único que no llega al tope de la barra (es decir se queda a la mitad y vuelve a empezar, antes me saltaba una excepción cuando llegaba a ese punto... ) :P

 :¬¬ quién te entiende.

El código actual es lo que publicaste en tu primer comentario más la modificación del código de EleKtro H@cker???
En línea

abc
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #6 en: 1 Agosto 2013, 19:36 pm »

Eso quiere decir que estas sacando mal el calculo del valor actual del progressbar.

Recuerda que el valor máximo es 100 y está por porcentajes.

Digamos que tienes 5 manzanas de 200, entonces tienes un 2.5% de todas las manzanas, nunca llegarás al 101%.

Código:
200 = 100%
5     = x%

((5 * 100) / 2) = 2.5%

Puedes arreglarlo diciendo que si el valor es mayor que 100 entonces que el valor vuelva a 100 pero estarias dando una información no exacta y falsa sobre tu progressbar porque cuando diga que lleva 30% a lo mejor van a ser 20% reales.

Además no deberias usar un timer, debes usar eventos, donde cada ves que se quiera establecer un valor entonces haga todo el cambio, para eso debes crear un "Control de usuario" y desde ahi crear la función setValue donde le indiques el valor y en ese momento que cambie la barra.

Que sucede si abusas del timer?... si haces un timer muy rapido y la barra no se ha movido en 5 minutos entonces tendras un uso de CPU bastante considerable sin hacer nada, mientra mas rapido sea el timer mas CPU va a utilizar, en cambio con los eventos podras hacer que se cambie solamente cuando se establezca un valor.
« Última modificación: 1 Agosto 2013, 19:39 pm por WHK » En línea

z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #7 en: 1 Agosto 2013, 19:40 pm »

Citar
Además no deberias usar un timer, debes usar eventos, donde cada ves que se quiera establecer un valor entonces haga todo el cambio, para eso debes crear un "Control de usuario" y desde ahi crear la función setValue donde le indiques el valor y en ese momento que cambie la barra.

Que sucede si abusas del timer?... si haces un timer muy rapido y la barra no se ha movido en 5 minutos entonces tendras un uso de CPU bastante considerable sin hacer nada, mientra mas rapido sea el timer mas CPU va a utilizar, en cambio con los eventos podras hacer que se cambie solamente cuando se establezca un valor.

Interesante ::) Voy a ver lo que encuentro por ahí, gracias WHK ;)
En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.817



Ver Perfil
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #8 en: 1 Agosto 2013, 19:50 pm »

...Ikillnukes, el código que puse es 100% funcional, de echo es fácil de entender y se puede apreciar a simple vista que no puede haber error alguno en las condiciones que usé.

Lo que te sucede de que la barra llega a la mitad y no sube, pero ves como vuelve a empezar el Filling ...pues la razón es muy simple, lo que sucede es que al no usar otro hilo para rellenar la barra, todas las instrucciones se hacen en el mismo hilo y la barra de progreso no da a basto a la hora de rellenarse, pintarse, y refrescarse, debes refrescar manuálmente el control para mostrar los cambios con un "progressbar1.refresh" o un "invalidate" después de modificar el valor de la barra...en cada ocasión.

...en resumen, tu crees que no se llena la barra, pero en realidad se llena, sólo que no se muestra rellenada, eso pasa siempre con las progressbar sin hilo (aunque en el code que te puse a mi no me pasa, así que quizás también influya la velocidad del PC).

Ya te dije que para usar barras de progresos tienes que introducirte en el tema del multi hilo (multi-threading), busca ejemplos de progressbars con threads o con backgroundworkers en Google, porque hay miles.

Una barra de progreso sin un thread es una chapuza muy grande, ya que ralentiza globálmente el Form, y bastante.

Un saludo
« Última modificación: 1 Agosto 2013, 19:52 pm por EleKtro H@cker » En línea

SγиtαxEяяoя

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: Problema con Progress Bar: El valor de '101' no es válido para 'Value'.
« Respuesta #9 en: 2 Agosto 2013, 21:26 pm »

Y que tal si yo doy mi aporte  :rolleyes:

Código
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Timer1.Start()
  3.        Label1.Text = ("Working")
  4.    End Sub
  5.  
  6.    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  7.  
  8.        If ProgressBar1.Value < ProgressBar1.Maximum Then
  9.            ProgressBar1.Value += 1
  10.        Else
  11.            ProgressBar1.Value = ProgressBar1.Minimum = 99
  12.            Timer1.Stop()
  13.            Label3.Text = ("Success")
  14. 'Aqui puedes agregar algún evento, algo como mostrar un Form al completar la barra al 100%
  15. 'Siempre la barra se resetea a 0% cuando llega a su tope, y no se reinicia
  16.        End If
  17.    End Sub
  18.  

Espero que te funcione :)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines