vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · ListBox   |   VB-Versionen: VB4, VB5, VB608.09.04
MultiSelect in ListBox bzw. FileListbox

Dieser Tipp zeigt eine erweiterte Möglichkeit zur Mehrfachselektion im List- und FileListBox-Control.

Autor:   Henryk KolodziejBewertung:     [ Jetzt bewerten ]Views:  18.682 
www.hekoste.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Sie möchten in einer List- bzw. FileList-Box mehrere zusammenhängende Bereiche auswählen, bei einigen ausgewählten Bereichen die Auswahl teilweise wieder aufheben und zusätzlich einzelne Einträge aus- bzw. abwählen. Mit den VB-Standartvorgaben ist das auch möglich, aber vergleichen Sie selbst.

Und so wird es gemacht: Bei einer gedrückt gehaltenen Taste (frei wählbar) wählen Sie mit der Maus den ersten auszuwählenden Eintrag, dann den letzten des Bereichs aus.
Die Folge: Der gesamte Bereich wird markiert. Diesen Vorgang können Sie beliebig oft wiederholen.

Bei Abwahl von Einträgen halten Sie eine andere Taste gedrückt (ebenfalls frei wählbar) und wiederholen die obigen Schritte. Die Auswahl von Bereichen kann sowohl von oben nach unten als auch von unten nach oben erfolgen (die Taste können Sie zwischendurch wieder loslassen, bei Auswahl von Bereichen müssen Sie diese aber wieder gedrückt halten).

Für die Aus- bzw. Abwahl einzelner Einträge wird die Taste nicht benötigt.

Die Auswahl funktioniert auch bei einer Listbox mit der Style-Eigenschaft 1 (Kontrollkästchen).

Bei einer FileListBox funktioniert die Aus- bzw. Abwahl von Bereichen nur, wenn Sie für die Auswahl die Shift-Taste, für Abwahl die Strg-Taste benutzen!

Öffnen Sie eine neues Projekt und platzieren 5 CommandButtons, 2 ListBoxen und eine FileListBox auf die Form. Setzen Sie bei List1 die Multiselect-Eigenschaft auf 1, bei List2 die Style-Eigenschaft auf 1 und bei FileListbox die Multiselect-Eigenschaft auf 1.

Im Beispiel erfolgt die Bereichswahl bei gedrückter Shift-Taste, Abwahl bei Strg-Taste. Die Tastenzuordnung selbst erfolgt im Code.

Fügen Sie jetzt den folgenden Code ein und probieren die Möglichkeiten einfach aus.

Option Explicit
 
' Variablendefinition
Public SelAnf As Long
Public SelEnd As Long
Public TasteGeDrueckt As String
Public TasteSelect As String
Public TasteDelSelect As String
Public KeyCode As Integer
Private Sub Form_Load()
  ' wichtig
  Me.KeyPreview = True
 
  Command1.Caption = "List1 füllen"
  Command2.Caption = "List1 zurücksetzen"
  Command3.Caption = "List2 füllen"
  Command4.Caption = "List2 zurücksetzen"
  Command5.Caption = "FileList zurücksetzen"
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  ' Taste ist noch gedrückt
  If TasteGeDrueckt = "Y" Then Exit Sub
 
  ' Merken, wenn Taste gedrückt
  ' hier erfolgt auch die Tastenzuordnung
  If KeyCode = vbKeyShift Then TasteSelect = "Y"
  If KeyCode = vbKeyControl Then TasteDelSelect = "Y"
 
  If TasteSelect = "Y" Or TasteDelSelect = "Y" Then TasteGeDrueckt = "Y"
  SelAnf = -1
  SelEnd = -1
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  ' Taste wurde losgelassen
  TasteGeDrueckt = "N"
  TasteSelect = "N"
  TasteDelSelect = "N"
End Sub
Private Sub Command1_Click()
  ' List1 füllen
  Dim i As Long
 
  List1.Clear
  For i = 1 To 50
    List1.AddItem i
  Next i
End Sub
Private Sub Command2_Click()
  ' List1: Auswahl zurücksetzen
  Dim i As Long
 
  For i = 0 To List1.ListCount - 1
    If List1.Selected(i) = True Then List1.Selected(i) = False
  Next i
End Sub
Private Sub Command3_Click()
  ' List2 füllen
  Dim i As Long
 
  List2.Clear
  For i = 1 To 50
    List2.AddItem i
  Next i
End Sub
Private Sub Command4_Click()
  ' List2: Auswahl zurücksetzen
  Dim i As Long
 
  For i = 0 To List2.ListCount - 1
   If List2.Selected(i) = True Then List2.Selected(i) = False
  Next i
End Sub
Private Sub Command5_Click()
  ' FileList: Auswahl zurücksetzen
  Dim i As Long
 
  For i = 0 To File1.ListCount - 1
    If File1.Selected(i) = True Then File1.Selected(i) = False
  Next i
End Sub
Private Sub File1_Click()
  SetExtendedSelection File1
End Sub
 
Private Sub List1_Click()
  SetExtendedSelection List1
End Sub
 
Private Sub List2_Click()
  SetExtendedSelection List2
End Sub
Private Sub SetExtendedSelection(oList As Object)
  Dim i As Long
  ' nur wenn taste gedrueckt
  If TasteGeDrueckt = "Y" Then
    With oList
      ' Aanfangs-Position merken
      If SelAnf = -1 Then
        SelAnf = .ListIndex
        Exit Sub
      End If
 
      ' End-Position festlegen
      If SelEnd = -1 Then
        SelEnd = .ListIndex
 
        ' Auswahlmarkierung nur,
        ' wenn Anfangs- und End-Position vorhanden
        If SelAnf < SelEnd Then
          ' Auswahl von oben nach unten
          For i = SelAnf To SelEnd
            If TasteSelect = "Y" Then
              .Selected(i) = True
            ElseIf TasteDelSelect = "Y" Then
              .Selected(i) = False
            End If
          Next i
 
        ElseIf SelEnd < SelAnf Then
          ' Auswahl erfolgte von unten nach oben
          For i = SelEnd To SelAnf
            If TasteSelect = "Y" Then
              .Selected(i) = True
            ElseIf TasteDelSelect = "Y" Then
              .Selected(i) = False
            End If
          Next i
        End If
 
        ' Zurücksetzen der Positionswerte
        SelAnf = -1
        SelEnd = -1
      End If
    End With
  End If
End Sub

Dieser Tipp wurde bereits 18.682 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel