none
Recuperare l'elemento della listbox al passaggio del mouse RRS feed

Risposte

  • Buongiorno wawalex,

    si tratta di una operazione piuttosto immediata: la ListBox dispone di un evento, MouseMove, attraverso cui recuperare le coordinate del cursore rispetto al controllo stesso. Questo evento, unitamente al metodo IndexFromPoint (proprio della ListBox) consente di recuperare l'indice dell'elemento, e quindi di poter derivarne il contenuto.

    In codice, questo:

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ListBox1.DataSource = {"a", "b", "c", "d", "e", "f"}
        End Sub
    
        Private Sub ListBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseMove
            Dim item As Integer = ListBox1.IndexFromPoint(e.X, e.Y)
            If item > -1 Then TextBox1.Text = ListBox1.Items(item).ToString()
        End Sub
    End Class

    Come vedi, dispongo qui di una ListBox, che vado a popolare con le lettere da "a" a "f".
    Nell'evento MouseMove, vado a ricavarmi l'indice dell'elemento su cui il cursore sta passando, ed infine, se esso è valido (ovvero, se è maggiore di -1, ossia sono nella zona degli elementi valorizzati), ricavo dalla ListBox l'elemento avente tale indice, riportandone il contenuto su una TextBox appositamente creata.

    (Nota: nello screenshot purtroppo non si vede, ma in linea con quanto affermato, il cursore era posizionato sull'elemento "c")

    Spero di esserti stato di aiuto


    Emiliano Musso // Microsoft MVP .NET



    • Proposto come risposta vbMizio martedì 2 agosto 2016 08:44
    • Modificato Emiliano MussoModerator martedì 2 agosto 2016 08:46 Chiarimento aggiuntivo in chiusura
    • Contrassegnato come risposta Alex Mengoli martedì 2 agosto 2016 11:48
    martedì 2 agosto 2016 08:31
    Moderatore

Tutte le risposte

  • Ciao Wawalex, 

    Vedi qui: LINK

    La risposta di ChiefRedBull ti darà un idea come iniziare. Purtroppo non sono sicuro cosa esattamente vorresti ottenere visto la poca informazione fornite. 

    Nonostante, prendendo le XY della mouse, controlli se corrisponde alle XY della listbox e assegni un commando che istruisce l'app di leggere e/o prendere il valore della suddetta listbox mettendola in una variabile. Poi usarla sarebbe facile. 


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 2 agosto 2016 08:20
    Moderatore
  • Buongiorno wawalex,

    si tratta di una operazione piuttosto immediata: la ListBox dispone di un evento, MouseMove, attraverso cui recuperare le coordinate del cursore rispetto al controllo stesso. Questo evento, unitamente al metodo IndexFromPoint (proprio della ListBox) consente di recuperare l'indice dell'elemento, e quindi di poter derivarne il contenuto.

    In codice, questo:

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ListBox1.DataSource = {"a", "b", "c", "d", "e", "f"}
        End Sub
    
        Private Sub ListBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseMove
            Dim item As Integer = ListBox1.IndexFromPoint(e.X, e.Y)
            If item > -1 Then TextBox1.Text = ListBox1.Items(item).ToString()
        End Sub
    End Class

    Come vedi, dispongo qui di una ListBox, che vado a popolare con le lettere da "a" a "f".
    Nell'evento MouseMove, vado a ricavarmi l'indice dell'elemento su cui il cursore sta passando, ed infine, se esso è valido (ovvero, se è maggiore di -1, ossia sono nella zona degli elementi valorizzati), ricavo dalla ListBox l'elemento avente tale indice, riportandone il contenuto su una TextBox appositamente creata.

    (Nota: nello screenshot purtroppo non si vede, ma in linea con quanto affermato, il cursore era posizionato sull'elemento "c")

    Spero di esserti stato di aiuto


    Emiliano Musso // Microsoft MVP .NET



    • Proposto come risposta vbMizio martedì 2 agosto 2016 08:44
    • Modificato Emiliano MussoModerator martedì 2 agosto 2016 08:46 Chiarimento aggiuntivo in chiusura
    • Contrassegnato come risposta Alex Mengoli martedì 2 agosto 2016 11:48
    martedì 2 agosto 2016 08:31
    Moderatore
  • Grazie. E' semplicemente perfetto! In più è anche molto compatto come codice.
    martedì 2 agosto 2016 11:49