none
Novato novatisimo RRS feed

  • Pregunta

  • Hola y gracias por vuestra ayuda
    Pues como dice el titulo soy novato y estoy aprendiendo prácticamente desde cero
    Estoy diseñando un visor de imágenes en plan aprendizaje en el que desde una label cuando paso el mouse (eventos MouseMove y MouseLeave) se carga o descarga una imagen en un PistureBox

    Private Sub Label1_MouseMove(sender As Object, e As MouseEventArgs) Handles Label1.MouseMove
    PictureBox1.Image = Image.FromFile("C:\Users\xxx\Desktop\Images\image1.jpg")
    End Sub

    Private Sub Label1_MouseLeave(sender As Object, e As EventArgs) Handles Label1.MouseLeave
    PictureBox1.Image = Image.FromFile("C:\Users\xxx\Desktop\images\imageBase.jpg")
    End Sub

    El tema es que quiero hacerlo con unas 20 o 30 labels y cada label carga una imagen distinta

    Repetir este código 30 veces aparte de engorroso, creo que quedaría muy sucio y me gustaría saber como hacerlo sin usar tantas lineas de código, osea mas resumido y mas corto.

    Muchas gracias!
    Un saludo!
    sábado, 9 de marzo de 2019 11:24

Respuestas

  • Hola Joel C. muchas gracias por la respuesta

    Lo he estado probando y me da un error 'Path' no esta declarado

    No tengo ni idea de que es eso.

    Gracias

    Un saludo!

    Hola chokD,

    Es porque no has agregado el Import de la librería IO.

    Imports System.IO

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta chokD sábado, 9 de marzo de 2019 17:40
    sábado, 9 de marzo de 2019 17:09

Todas las respuestas

  • Hola chokD,

    Una manera de poder lograrlo puede ser la siguiente, solo necesitas agregar el import para utilizar la clase Path:

    Imports System.IO

    'Ruta de la carpeta que almacenará todas las imágenes
    Dim ruta As String = Path.Combine(Environment.GetFolderPath(
                                      Environment.SpecialFolder.Desktop), "Images")
    
    'Ruta de la imagen base
    Dim imgBase As String = Path.Combine(ruta, "imageBase.jpg")
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Cargar la imagen base al cargar el formulario
        PictureBox1.LoadAsync(imgBase)
    
        'Por cada control Label del formulario crea un Handler
        'asignado a un determinado evento
        For Each lbl As Label In Controls.OfType(Of Label)
            AddHandler lbl.MouseEnter, AddressOf lblMouseEnter
            AddHandler lbl.MouseLeave, AddressOf lblMouseLeave
        Next
    
    End Sub

    Y lo métodos asignados a cada uno de ellos :

    Como los controles tienen el nombre "Label1", "Label2", "Label3" .... "Label22" simplemente reemplazados la palabra "Label" por vacío y obtendrá solo el número, así generamos nuestro formato : "image1.jpg", "image2.jpg", "image3.jpg" ... "image22.jpg", que será el nombre de las imágenes que tendrá nuestra carpeta Images.

    **Nota : Un problema que podría originarse es si tienes una imagen con otro tipo de extensión que no sea .jpg, ahí tendrías que hacer un código 'extra'.

    Private Sub lblMouseEnter(sender As Object, e As EventArgs)
        Dim lbl As Label = CType(sender, Label)
        If lbl IsNot Nothing Then
            PictureBox1.LoadAsync(
                Path.Combine(ruta, String.Format("image{0}.jpg", lbl.Name.Replace("Label", ""))))
        End If
    End Sub
    
    Private Sub lblMouseLeave(sender As Object, e As EventArgs)
        PictureBox1.LoadAsync(imgBase) 'Cuando sale del label carga la imagen base
    End Sub


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 9 de marzo de 2019 14:56
  • Hola Joel C. muchas gracias por la respuesta

    Lo he estado probando y me da un error 'Path' no esta declarado

    No tengo ni idea de que es eso.

    Gracias

    Un saludo!

    sábado, 9 de marzo de 2019 16:46
  • Hola Joel C. muchas gracias por la respuesta

    Lo he estado probando y me da un error 'Path' no esta declarado

    No tengo ni idea de que es eso.

    Gracias

    Un saludo!

    Hola chokD,

    Es porque no has agregado el Import de la librería IO.

    Imports System.IO

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta chokD sábado, 9 de marzo de 2019 17:40
    sábado, 9 de marzo de 2019 17:09
  • joel C. Muchas gracias por el esfuerzo

    Un saludo!

    sábado, 9 de marzo de 2019 17:41