Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB.NET] Cambio immagine troppo lenta su un evento MouseHover

    Salve a tutti.
    Sto sviluppando una semplice applicazione gestionale in VB.NET. Il menu principale è composto da diversi tasti che sono le sezioni del gestionale. Ogni tasto è un oggetto PictureBox per ognuno dei quali viene caricata un'immagine di sfondo all'avvio dell'applicazione. Inoltre sono gestiti gli eventi MouseHover e MouseLeave di ogni PictureBox: in MouseHover viene caricata un'altra immagine, in MouseLeave viene ripristinata quella di partenza.
    Funziona correttamente, solo che l'evento MouseHover si verifica qualche frazione di secondo in ritardo e così l'immagine secondaria viene caricata leggermente dopo. Viceversa all'evento MouseLeave l'immagine primaria ricompare istantaneamente. Non è una cosa grave ma è un fenomeno che vorrei correggere. Come potrei fare? Grazie in anticipo

    PS:

    Per farlo utilizzo la funzione

    picturebox1.BackGroundImage = System.Drawing.Bitmap.FromFile(NomeFile)

    e il file che uso è in PNG. Ho provato con JPG e il risultato non cambia. Ho provato anche:

    picturebox1.BackGroundImage = System.Drawing.Image.FromFile(NomeFile)

    ma anche così non è cambiato nulla.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova con una

    Application.DoEvents()

    subito dopo il cambio di immagine
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Niente, non cambia nulla. Altro particolare: quando il cursore del mouse passa da fuori a dentro l'area del pulsante ma non smetto di muoverlo e continuo a muoverlo dentro l'area del pulsante, l'evento MouseHover non si scatena. E' normale che venga eseguito solo quando fermo il cursore?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Certo che è normale, l'evento che si scatena al movimento dentro il controllo è MouseMove.
    Innanzitutto per questo scopo si utilizza l'evento MouseEnter, l'evento MouseHover si verifica con un certo ritardo.

    Gli eventi MouseHover e MouseEnter sono simili tra di loro, con la differenza che il primo si scatena quando il mouse si sofferma sopra il controllo, mentre il secondo si scatena non appena il mouse entra nel controllo.

    Poi vedo che utilizzi delle immagini su file, che a loro volta impiegano un certo numero di millisecondi per essere caricate.
    Puoi migliorare la situazione in questo modo:

    codice:
    Public Class Form1
        Dim img1 As Image
        Dim img2 As Image
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            img1 = Image.FromFile("C:\image1.jpg")
            img2 = Image.FromFile("C:\image2.jpg")
            PictureBox1.Image = img1
        End Sub
    
        Private Sub PictureBox1_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseEnter
            PictureBox1.Image = img2
        End Sub
    
        Private Sub PictureBox1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseLeave
            PictureBox1.Image = img1
        End Sub
    End Class

  5. #5
    Capito, ha funzionato. Grazie mille per l'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.