vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Listbox - Datenbindung - Multiselection: Workaround 
Autor: Manfred X
Datum: 16.03.14 13:15

Ich habe im damaligen Projekt nachgeschaut.
Ich benötigte die MultiExtended-Einstellung des Selectionmode,
um per Umschalt-/Pfeil-Tasten markieren zu können.

Ich hatte eine Listbox abgeleitet und eine "LastSelectedIndex"-Eigenschaft
angefügt, die immer das zuletzt gewählte Item zurückgibt.
Diese Eigenschaft kann im SelectedIndexChanged-Event des Control
abgefragt und verwendet werden.
Imports System
Imports System.Windows.Forms
 
Public Class ListBoxSelectMultiExtended
    Inherits Windows.Forms.ListBox
 
    Dim _pressedkey As Keys
    Dim _lastselectedindex As Integer
 
 
    Public Sub New()
        MyBase.SelectionMode = Windows.Forms.SelectionMode.MultiExtended
        _lastselectedindex = -1
    End Sub
 
 
    Public Shadows Property Selectionmode() As Windows.Forms.SelectionMode
        Set(value As Windows.Forms.SelectionMode)
            MyBase.SelectionMode = Windows.Forms.SelectionMode.MultiExtended
        End Set
        Get
            Return MyBase.SelectionMode
        End Get
    End Property
 
 
    Protected Overrides Sub OnKeyDown(e As System.Windows.Forms.KeyEventArgs)
        MyBase.OnKeyDown(e)
        _pressedkey = e.KeyCode
    End Sub
 
 
    Private Shadows Sub SelectedIndexChanged(sender As Object, _
        e As System.EventArgs) Handles MyBase.SelectedIndexChanged
        FindIndexToShow()
    End Sub
 
 
    Public ReadOnly Property LastSelectedIndex() As Integer
        Get
            Return _LastSelectedIndex
        End Get
    End Property
 
 
    Private Sub FindIndexToShow()
 
        Static oldindices() As Integer
        Dim found As Boolean, k As Integer
 
        With Me.SelectedIndices
            If .Count = 0 Then
                _lastselectedindex = -1
            ElseIf .Count = 1 Then
                _lastselectedindex = .Item(0)
            ElseIf oldindices IsNot Nothing Then
                For i As Integer = 0 To .Count - 1
                    found = False
                    For k = 0 To oldindices.Length - 1
                        If .Item(i) = oldindices(k) Then found = True : Exit For
                    Next k
                    If Not found Then
                        'neu markiertes Item gefunden
                        _lastselectedindex = .Item(i) : Exit For
                    End If
                Next i
 
                If found Then
                    For i As Integer = 0 To oldindices.Length - 1
                        found = False
                        For k = 0 To .Count - 1
                            If .Item(k) = oldindices(i) Then found = True : _
                              Exit For
                        Next k
                        If Not found Then
                            'gelöschtes Item gefunden
                            If _pressedkey = Keys.Up And k > 0 Then
                                'Item davor einstellen
                                _lastselectedindex = .Item(k - 1)
                            ElseIf _pressedkey = Keys.Down And k < .Count - 1 _
                              Then
                                'Item danach einstellen 
                                _lastselectedindex = .Item(k + 1)
                            Else
                                _lastselectedindex = Me.SelectedIndex
                            End If
                            Exit For
                        End If
                    Next i
                End If
            End If
 
            If .Count > 0 Then
                'aktuelle Auswahl speichern
                ReDim oldindices(.Count - 1)
                Me.SelectedIndices.CopyTo(oldindices, 0)
            Else
                oldindices = Nothing
            End If
        End With
    End Sub
End Class


Beitrag wurde zuletzt am 16.03.14 um 13:29:56 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Listbox - Datenbindung - Multiselection: Wahl des Current-It...1.823Manfred X26.03.11 13:03
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...1.103Manfred X30.03.11 13:43
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...912Rostrot15.03.14 15:42
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...919Manfred X15.03.14 16:11
Re: Listbox - Datenbindung - Multiselection: Workaround852Manfred X16.03.14 13:15
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...977Rostrot16.03.14 14:04
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...847Manfred X16.03.14 15:27
Re: Listbox - Datenbindung - Multiselection: Wahl des Curren...885Rostrot17.03.14 16:50

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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