list box



  • list box
    di dlacascia data: 08/04/2013 09:00:35

    in una list box, vorrei utilizzare gli eventi click e dbclick in maniera differente. Nel caso del click, tutto funziona regolarmente, nel caso del dbclick, non mi viene riconosciuto il valore di list index che rimane sempre = a -1 qualunque record seleziono.
    Nel caso del click, invece, list index viene riconosciuto in modo corretto.
    sono sono indicate i due eventi diversi. Il primo non funziona, il secondo sì
     
    Private Sub lstOperatori_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    r=lstOperatori.listindex
    end sub
    
    
    Private Sub lstOperatori_Click()
    r=lstOperatori.listindex
    end sub



  • di Vecchio Frac data: 08/04/2013 11:14:28

    Il punto è che i due eventi sono troppo simili tra di loro e viene intercettato prima il solo click.
    Solo facendo doppio click rapidamente sullo stesso elemento già selezionato non scatta il click ma il double click. Negli altri casi il singolo click ha la precedenza.
    Puoi in parte ovviare intercettando il mouseup, distinguendo tra click sinistro e click destro, ma il problema è che il click destro non effettua lo spostamento della selezione.
     
    Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        
        If Button = xlPrimaryButton Then
            MsgBox "Left click on " & ListBox1.ListIndex
        ElseIf Button = xlSecondaryButton Then
            MsgBox "Right click on " & ListBox1.ListIndex
        End If
    
    End Sub






  • di Vecchio Frac data: 08/04/2013 11:48:46

    In alternativa, invece di gestire eventi click diversi per scopi diversi, puoi creare due pulsanti sul form che (una volta selezionato un elemento) consentono azioni specifiche sull'elemento selezionato.





  • di diego (utente non iscritto) data: 08/04/2013 12:28:24

    il problema è un altro, l'evento click, avviene regolarmente, ma anche l'evento dbclick, avviene regolarmente, solo che nel secondo caso, il valore listindex, rimane uguale a -1 a prescindere da quale sia il record selezionato.
    Ad esempio faccio click sul record numero 4 viene evidenziato e r diventa uguale a 4.
    Pur rimanendo evidenziato il record numero 4, faccio il doppio click, viene eseguita la sub relativa a double click, ma r, anzichè 4 diventa -1.



  • di Vecchio Frac data: 08/04/2013 13:38:40

    Piuttosto strano, anche percè a me funziona regolarmente.
    Di seguito posto il codice che ho impostato al volo per fare il test.
    Un click e la caption dell'userform mi dice regolarmente "Clicked 0" (o 1 o 2).
    Doppio click sull'elemento selezionato e la caption dell'userform mi dice regolarmente "Double clicked 0" (o 1 o 2).
     
    Option Explicit
    
    Private Sub UserForm_Initialize()
        With ListBox1
            .AddItem "0"
            .AddItem "1"
            .AddItem "2"
        End With
    End Sub
    
    
    Private Sub ListBox1_Click()
        UserForm1.Caption = "Clicked " & ListBox1.ListIndex
    End Sub
    
    
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        UserForm1.Caption = "Double clicked " & ListBox1.ListIndex
    End Sub
    






  • di diego (utente non iscritto) data: 08/04/2013 15:19:06

    effettivamente all'interno del codice dell'evento click c'era un istruzione che impostava listindex= -1, e siccome quando si fa il dobpio click, parte prima l'evento click, e solo successivamente il doppio click, veniva impostata la proprietà listindex che creava poi l'errore sull'evento doppio click.
    Chiaramente immagino che non ci sia modo di saltare il click nel caso in cui si voglia il doppio vero?
    Inoltre come mai in debug pur facendo il doppio click, si debugga solo il click e finito questo il debug si ferma, ma se siamo fuori dal debug vengono eseguiti tutti e due?



  • di Vecchio Frac data: 08/04/2013 16:55:08

    cit. "Chiaramente immagino che non ci sia modo di saltare il click nel caso in cui si voglia il doppio vero? "
    ---> Onestamente *io* non sono a conoscenza di un modo per ottenere questo, e non l'ho trovato neanche in rete, ma ammetto di aver cercato piuttosto superficialmente.

    cit. "Inoltre come mai in debug pur facendo il doppio click, si debugga solo il click e finito questo il debug si ferma, ma se siamo fuori dal debug vengono eseguiti tutti e due? "
    ---> A me viene intercettato solo il singolo click, il doppio soltanto se sono già sullo stesso elemento selezionato, ma nel magico mondo di Microsoft può succedere di tutto :)





  • di diego (utente non iscritto) data: 08/04/2013 17:09:38

    ok per il momento comunque grazie il problema più grosso l'ho risolto.