Controlar que las imagenes se han terminado de cargar

27/02/2007 - 03:58 por Takedasan | Informe spam
Hola a todos,

llevo dandole vueltas a un asunto que me trae de cabeza, pues estoy
empezando a trabajar con VB 2005 y muchas cosas de VB6 ya no son validas y
ando algo perdido.
introduzco imagenes en desde una direccion web en un PictureBox y claro cada
una tarda diferente tiempo en cargarse, aunque sean del mismo tamaño y
definicion, es cuestion de la conexion establecida al momento de ejecutar la
orden.

El caso es que cargo esas imagenes y me gustaria saber como puedo hacer para
saber si las 12 imagenes se han terminado de cargar y asi permitir realizar
la vision de la secuencia, es decir, saber en que momento puedo dar sin miedo
al boton que presenta todas las imagenes, ya que si hay alguna que todavia se
esta cargando se bloquea, pues todavia, el contenido del PictureBox es
Nothing.

Gracias por la ayuda

Preguntas similare

Leer las respuestas

#1 SoftJaén
27/02/2007 - 14:51 | Informe spam
"Takedasan" preguntó:

El caso es que cargo esas imagenes y me gustaria saber como puedo hacer
para saber si las 12 imagenes se han terminado de cargar.



Hola:

Te informo que el control PictureBox de la versión 2.0 del marco de trabajo
de .net, tiene los siguientes eventos:

LoadCompleted. Se produce cuando la operación de carga de imagen asincrónica
se ha completado, se ha cancelado o ha provocado una excepción.

LoadProgressChanged. Se produce cuando ha cambiado el progreso de una
operación de carga de imagen asincrónica.

Pero para ello, deberás cargar la imagen mediante el método «LoadAsync», es
decir, de forma asíncrona, tal y como muestra el ejemplo que te indico,
sacado de la ayuda de Visual Studio:

Private Sub PictureBox1_LoadCompleted(...) Handles ...

MessageBox.Show("Imagen cargada.")

End Sub

Private Sub Button1_Click( ...) Handles ...

' Ensure WaitOnLoad is false.
PictureBox1.WaitOnLoad = False

' Load the image asynchronously.
PictureBox1.LoadAsync("http://localhost/print.gif")

End Sub

Private Sub PictureBox1_LoadProgressChanged(...) Handles ...

PictureBox1.LoadProgressChanged
progressBar1.Value = e.ProgressPercentage

End Sub

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 SoftJaén
27/02/2007 - 15:04 | Informe spam
Bueno, en el evento «LoadCompleted» tendrías que verificar si se ha
cancelado la carga, o se ha producido alguna excepción, porque en caso
contrario, se supone que se ha cargado correctamente la imagen:

Private Sub PictureBox1_LoadCompleted( ...) Handles ...

Dim msg As String

If e.Cancelled Then
msg = "Operación cancelada."

ElseIf (Not e.Error Is Nothing) Then
msg = "Se ha producido una excepción."

Else
msg = "Imagen cargada."

End If

MessageBox.Show(msg)

End Sub

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#3 Takedasan
27/02/2007 - 18:12 | Informe spam
Gracias por las dos informaciones, evidentemente los cambios en VB2005 son
muchos pero esta claro que mejor organizados y es cuestion de saber donde
buscar.

Solo tengo una cuestion que me queda en el aire, debido que aunuqe las
rutinas realizan la accion deseada, no coincide el momento de la descaga
completada con la asignacion de la imagen al PictureBox. Me explico, he
establecido contadores para verificar el momento en que se completan las
descargas, y aunque se llega a las 12 completadas, las imagenes no aparecen
en el PictureBox en ese instante, he intentado con un Refresh pero no es la
solucion.

En definitiva, pese que la situación mejoró tecnicamente, no es la solución
deseada
Gracias


"SoftJaén" wrote:

Bueno, en el evento «LoadCompleted» tendrías que verificar si se ha
cancelado la carga, o se ha producido alguna excepción, porque en caso
contrario, se supone que se ha cargado correctamente la imagen:

Private Sub PictureBox1_LoadCompleted( ...) Handles ...

Dim msg As String

If e.Cancelled Then
msg = "Operación cancelada."

ElseIf (Not e.Error Is Nothing) Then
msg = "Se ha producido una excepción."

Else
msg = "Imagen cargada."

End If

MessageBox.Show(msg)

End Sub

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.



Respuesta Responder a este mensaje
#4 SoftJaén
27/02/2007 - 19:21 | Informe spam
"Takedasan" escribió:

Solo tengo una cuestion que me queda en el aire, debido que aunuqe las
rutinas realizan la accion deseada, no coincide el momento de la descaga
completada con la asignacion de la imagen al PictureBox.



Ahí, ya no llego. :-)

Debes de tener en cuenta que son acciones que se ejecutan de manera
asíncrona, y encima, mediante una conexión a Internet, por lo que no esperes
que todo encaje a las mil maravillas, o se ejecute como nosotros
desearíamos.

Leyendo de nuevo mi mensaje, del evento «LoadProgressChanged» sobra la
siguiente sentencia:

PictureBox1.LoadProgressChanged

Al copiar/pegar se me ha olivado eliminar la parte final de la firma del
evento.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#5 Takedasan
27/02/2007 - 20:22 | Informe spam
Gracias,

veo que tendre que buscar algun 'delay' para que de tiempo a que todo el
proceso se termine.

Aprovecho y hago otra preguntita de novato; que quede por delante que la
version que estoy usando es la 'Express', ya que antes de decidirme a pasar
de VB6 definitivamente, quiero aclimatarme al cambio. La preguntita es, ¿de
que forma se puede hacer lo de los 'index' [PictureBox(index)]?, ya que me
resultaria dificil creer que tengo que hacer una a una por ejemplo el Refresh
y no con un simple 'loop' como se hace en VB6.

Gracias por aguantarme
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida