In een listbox met multiple selection mode aan weet je niet met de selected_index change event op welk item er nu geclicked is. Je hebt hooguit de verzameling geselecteerde item, hieronder is de oplossing om dit (windows forms vb.net 2.0) op te lossen door de muis klik op te vangen
Als je in VB.NET (windows forms) vb.net 2.0 op een listitem klikt waarbij er meerdere selecties mogelijk zijn weet je niet op welk item geklikt is. Errug onhandig, je kan dan wel alle items uitlezen, maar dan nog weet je niet precies op welk item je moet reageren.
Door het MouseDown event af te vangen kun je wel zien op welk item geklikt is. (maak even geen onderscheid tussen links en rechts). In dit voorbeeld maak ik een kolom in een DataGridView zichtbaar of onzichtbaar (listbox bevat kolomnamen).
Code:
Private Sub Kolommen_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Kolommen.MouseDown
Dim i As Integer
For i = 0 To Kolommen.Items.Count
If Kolommen.GetItemRectangle(i).Contains(e.Location) Then
gvTaken.Columns(Kolommen.Items(i).ToString()).Visible = Not gvTaken.Columns(Kolommen.Items(i).ToString()).Visible
Exit Sub
End If
Next
End Sub
De crux zit hem in Kolommen.GetItemRectangle(i).Contains(e.Location)
Let op, op het internet vind je ook andere oplossingen voor de muis vinden, maar deze houden (vaak) geen rekening met listbox die scrollbars hebben!