Rubrik: Controls · ListView & TreeView | VB-Versionen: VB2005, VB2008 | 16.12.09 |
Bestimmten ListView-Eintrag selektieren und Fokus setzen Eine Funktion, die einen bestimmten Eintrag innerhalb des ListView-Controls selektiert, diesen in den sichtbaren Bereich bringt und den Fokus auf den Eintrag setzt. | ||
Autor: Dieter Otter | Bewertung: | Views: 31.308 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Heute stellen wir Ihnen eine universelle Funktion vor, mit der Sie einen ganz bestimmten Eintrag innerhalb des ListView-Controls selektieren können und diesen in den sichtbaren Bereich bringen.
Wichtig: Damit der Eintrag auch den Fokus erhält, d.h. dieser autom. selektiert ist, wenn das ListView wieder den Fokus erhält, muss die Focused-Eigenschaft des ListView-Eintrags auf True festgelegt werden!
''' <summary> ''' Selektiert den angegebenen ListView-Eintrag, zeigt diesen ''' an und setzt den Fokus auf diesen Eintrag ''' </summary> ''' <param name="ListView">ListView-Control</param> ''' <param name="Index">Index des Eintrags, der selektiert werden soll</param> ''' <param name="RemoveSelection">Optional. Legt fest, ob eine bereits ''' vorhandene Selektion vorher entfernt werden soll.</param> Public Sub LV_SelectFocus(ByVal ListView As ListView, ByVal Index As Integer, _ Optional ByVal RemoveSelection As Boolean = True) With ListView ' Plausibilitätsprüfungen If Index < 0 Then Index = 0 If Index > .Items.Count - 1 Then Index = .Items.Count - 1 ' ggf. vorher eine vorhandene Auswahl entfernen If RemoveSelection Then .SelectedItems.Clear() If Index < .Items.Count Then With .Items(Index) ' Eintrag selektieren .Selected = True ' Sicherstellen, dass der Eintrag sich im ' sichtbaren Bereich des Controls befindet .EnsureVisible() ' Eintrag als aktiven Eintrag festlegen .Focused = True End With End If End With End Sub
Aufrufbeispiel:
' 1. Eintrag selektieren LV_SelectFocus(ListView1, 0)
' Letzten Eintrag selektieren LV_SelectFocus(ListView1, ListView1.Items.Count)
' 10 Einträge "zurückblättern" Dim Index As Integer = 0 With ListView1 If .SelectedIndices.Count > 0 Then Index = .SelectedIndices(0) End With LV_SelectFocus(ListView1, Index - 10)
' 10 Einträge "vorblättern" Dim Index As Integer = 0 With ListView1 If .SelectedIndices.Count > 0 Then Index = .SelectedIndices(0) End With LV_SelectFocus(ListView1, Index + 10)