Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263

    [VB.NET] Il comando MouseLeave non funziona sempre

    Ho scritto il seguente Codice:

    codice:
      Private Sub ImportaOn(sender As Object, e As EventArgs) Handles IconaImport.MouseEnter
            IconaImport.Image = My.Resources.Importa_B
            IconaImport.BackColor = Color.White
            IconaImport.BorderStyle = 2
            Application.DoEvents()
        End Sub
    
        Private Sub ImportaOff(sender As Object, e As EventArgs) Handles IconaImport.MouseLeave
            IconaImport.Image = My.Resources.Importa
            Application.DoEvents()
            IconaImport.BackColor = Color.Transparent
            Application.DoEvents()
            IconaImport.BorderStyle = 0
            Application.DoEvents()
        End Sub

    ma nonstante l'uso esagerato di "Applicatio.DoEvents()", quando il Mouse lascia l'Icona, il comando "MouseLeave" non viene eseguito.
    O meglio, viene eseguito in maniera casuale, solo quando gli pare, e l'icona rimane nello stato che si genera con il comando "MouseEnter".
    Per farla ritornare allo stato relativo al comando "Mouseleave", bisogna passarci sopra nuovamente e talvolta anche più volte.
    Posso anche pensare che sia il mio Mouse che non funziona bene, ...
    Qualcuno ha qualche idea?

  2. #2
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Aggiungo che non credo sia il mio Mouse a non funzionare, perché con altri Software installati (di terzi) nei quali la funzione è analoga, il processo si svolge regolarmente, ossia si verifica l'evento "MouseEnter" quando il mouse è sopra e l'evento "MouseLeave" quando lo sposto fuori.
    Torno quindi a chiedere se qualcuno ha utilizzato queste funzioni e che risultato ha ottenuto; eventualmente a questo punto anche una copia dello script utilizzato.
    Non è un grosso problema, lo so, ma sembra che il software sia malfunzionante,....
    Grazie

  3. #3
    Application.DoEvents serve a "gestire" eventuali ALTRI eventi che occorrano rispetto al codice in esecuzione.

    Tipicamente viene inserito in un Loop così lungo da "bloccare" la elaborazione di altri eventi, che restano in coda fino a Loop concluso.

    Ora, se metti Application.DoEvents all' interno di un evento... è chiaro che l' evento è già riconosciuto, per cui Application.DoEvents messo LI' è assolutamente inutile e magari dannoso.

    Non è che quando esci col mouse una qualche altra parte di codice nel frattempo fa delle lunghe elaborazioni (se l' icona si chiama Import....)? In tal case Application.DoEvents andrebbe messo LA'.

    Meglio ancora se l' importazione fosse eseguita su altro thread, tramite BackgroundWorker.
    Ultima modifica di eziogsv; 09-11-2017 a 18:40

  4. #4
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Grazie eziogsv.
    Toglierò dal mio codice la stringa Application.DoEvents e vedrò cosa accade.
    Per il resto, no, l'evento "MouseLeave" non da seguito ad elaborazioni lunghe perché gli eventi vengono elaborati solo dopo aver fatto click sull'icona. Gli eventi MouseEnter e MouseLeave servono solo a cambiare il colore dell'icona; di fatto sostituiscono l'icona corrente con una diversa, come da codice. Che il muose funzioni correttamente è provato perché ho installato la routine su un diverso PC ed ho ottenuto lo stesso risultato.
    Ho notato però che se muovo lentamente il mouse, l'evento si verifica: è solo quando lo muovo velocemente che non esegue il comando, tipicamente quando ci passo sopra per caso.
    Ancora grazie Ezio, non è la prima volta che mi aiuti.
    Ciao

  5. #5
    Quello che mi sfugge, pensando ad una applicazione con un senso logico, è che c' azzeccano Mouse_Enter e Mouse_Leave, se non eseguono Subroutines ma cambiano SOLO l' aspetto della icona.

    Cioè... se NON cliccki col mouse (cioè se non AGISCI) che ti cambia nella vita se l' icona cambia colore? E SE INVECE clicchi col mouse perché non mettere direttamente la gestione dei colori in Mouse_Down e Mouse_Up?

    Mouse_Up è sicuramente "meno" a rischio di errore di Mouse_Leave


    Ultima modifica di eziogsv; 13-11-2017 a 16:30

  6. #6
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Quello che ho realizzato con questo script è solo un "gioco" di immagine: è carino da vedere, secondo me. Poi ho solo copiato (non letteralmente, ovvio) quello che gli autori del programma di Contabilità in uso hanno fatto. Il programma in questione si chiama PICAM7 ed ha appunto questa funzione "giochino" estetico che al passaggio del Mouse cambia i colori dell'icona. I miei ci sono abituati e parzialmente affezionati; credevo fosse una cosa facilissima da fare, invece,...
    Confermo che la parte debole è il MouseLeave, mentre non ho mai problemi con il MouseEnter.
    Comunque, ho eliminato tutti le stringhe Application.DoEvents ma naturalmente non è cambiato nulla.
    A questo punto, perché MouseLeave è debole, secondo te?
    Magari scrivendolo in C# cambia qualcosa?

  7. #7
    Mah, vallo a capire. In effetti E' CERTO che MouseLeave funge se entri, AGISCI sul mouse e lasci... se ci passi sopra alla velocità della luce, magari l' evento non è fatto per gestire queste velocità.

    Se proprio vuoi intestardirti col giochino dei colori potresti:

    -All' evento MouseEnter lanciare un veloce timer di controllo, settato su pochi centesimi di secondo
    -Controllare ciò che sta sotto al mouse in qualche modo, tipo tramite WindowFromPoint()
    -Se ciò che sta sotto al mouse NON E' l' icona... cambia colore e stoppa il timer, che ovviamente va stoppato se MouseLeave viene recepito.

    Se la montagna non va a Maometto...

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da Rickycast Visualizza il messaggio
    Quello che ho realizzato con questo script è solo un "gioco" di immagine: è carino da vedere, secondo me. Poi ho solo copiato (non letteralmente, ovvio) quello che gli autori del programma di Contabilità in uso hanno fatto. Il programma in questione si chiama PICAM7 ed ha appunto questa funzione "
    PICAM7 è scritto in Visual C++.
    VB.NET non è adatto a queste cose (per la grafica è quello più sconsigliato).

  9. #9
    Utente di HTML.it L'avatar di Rickycast
    Registrato dal
    Apr 2007
    residenza
    CHIERI (TO)
    Messaggi
    263
    Grazie a entrambi.
    Se, appunto, scrivessimo la stessa procedura in C#, potrebbe essere meglio?

  10. #10

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 © 2024 vBulletin Solutions, Inc. All rights reserved.