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. 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.968 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
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. |