+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Numero della colonna selezionata in una listbox multicolonna

  1. #1
    BennyB non è in linea Scolaretto
    Post
    163

    Numero della colonna selezionata in una listbox multicolonna

    So che a molti sembrerà banale, ma per quanto mi sia prodigato, non sono riuscito a trovare la soluzione.

    Ho una listbox denominata "ElRicerche", composta da 5 colonne. Per una questione di programmazione, voglio ricavare il numero della colonna che l'utente schiaccia usando l'evento AfterUpdate(). Solo che non so come fare, né ho trovato suggerimenti nel WEB. Credo sia un'operazione insolita.
    A mio avviso dovrebbe avere a che fare con il metodo .itemsselected, ma le varie prove effettuate sono sempre state negative.
    Qualcuno ha una soluzione in merito?

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,456
    Se intendi RIGA si... ma colonna non puoi... non è determinabile se non via API ricavando la posizione del mouse relativa alla listbox... ricavando l'hwnd del controllo e scalando con ScreenToClient le coordinate X/Y del mouse, e convertendo la larghezza delle colonne da CM a Pixels...
    A quel punto sai su che colonna ti trovi.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    BennyB non è in linea Scolaretto
    Post
    163
    Caspita... facile facile... perché mai ci devono sempre essere queste complicazioni...

    Trovo l'opzione poco praticabile, e probabilmente troppo onerosa a livello di codice per quel che mi serve. Cercherò una strada alternativa... A meno che non riesca a trovare qualcosa di già scritto nel WEB da cui attingere.

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,456
    Se non hai la Horizontal ScrollBar, forse poi valutare una cosa meno complicata...
    codice:
    Function GetColumnOver(ctl As Access.ListBox, X As Single) As Integer
        Dim sCols       As String
        Dim vCols       As Variant
        Dim vCol        As Variant
        Dim lX          As Long
        Dim iCount      As Integer
    
        sCols = ctl.ColumnWidths
        vCols = Split(sCols, ";")
        For Each vCol In vCols
            iCount = iCount + 1
            lX = lX + Val(vCol)
            If X < lX Then
                GetColumnOver= iCount
                Exit For
            End If
        Next
    End Function
    Da richiamare passando il Controllo e la posizione X così
    codice:
    Private Sub lstFields_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        MsgBox GetColumnOver(Me.NomeListBox, X)
    End Sub
    P.S. attenzione che se la Larghezza della ListBox è Superiore alla Somma Colonne, l'area che supera l'ultima colonna genera Valore 0...
    Se hai la ScrollBar invece devi perforza passare per codice più complesso...
    Ultima modifica di @Alex; 22-05-2020 15:13 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  5. #5
    BennyB non è in linea Scolaretto
    Post
    163
    Interessante... sì, è una strada percorribile. Ora ci provo.

    Grazie.

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi