vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Manfred X
Datum: 26.03.11 13:03

Hallo!

Instanzen einer Klasse bewahre ich in einer generischen Liste auf.
Diese Liste habe ich per Bindingsource an die Datasource einer
WinForms-Listbox gebunden (eine Eigenchaft der Klasse -> Displaymember
der Liste).

Weitere Steuerelemente (Labels etc.) zeigen per DataBindings andere
Eigenschaften der aktuell in der Listbox eingestellten Instanz.

Die Selectionmode-Eigenschaft der Listbox steht auf "MultiExtended".

Wählt man per Tastatur (Shift/Up oder Shift/Down) eine größere
Zahl von Listeneinträgen, wird immer das (in der Liste) erste der
gewählten Elemente automatisch zum Current-Item der Bindung.
Ich möchte aber, dass das zuletzt markierte Listen-Item zum Current-Item
wird, damit während der Durchführung der Auswahl das Formular kontinuierlich
aktualisiert wird. Aufgrund des Bindungsverhaltens der Listbox klappt das
nur beim "Rückwärtsmarkieren".

Das Umsetzen der Position der Bindingsource per Code verhindert nicht,
dass die Liste bei jeder Gelegenheit wieder zum ersten gewählten Listen-
Item zurückspringt (und das Binding dabei "mitnimmt").

Hat jemand einen Tipp für mich. (Abgesehen davon, das man auf "One" geht
und per Tastenabfrage eine Item-Markierung per Code vornimmt oder auf die
Datenbindung verzichtet. Ich benötige die hohe Aktualisierungsrate.)

Danke für Euer Interesse.

MfG
Manfred

Beitrag wurde zuletzt am 26.03.11 um 13:05:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Manfred X
Datum: 30.03.11 13:43

Hallo!

.... keiner hat eine Idee?
.... niemand hat einen Vorschlag?




Ich setze jetzt in den angebundenen Daten eine Markierung .... sehr unschön!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Rostrot
Datum: 15.03.14 15:42

Hallo Manfred X

stand gerade vor dem gleichen Problem
bin auf diesen Beitrag gestoßen
und dann durch Versuch und Irrtum
auf folgende Lösung:

    Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
        ListBox1.SelectionMode = SelectionMode.MultiSimple
    End Sub
ohne Zusatztaste!

Mit Dank für viele hilfreiche Tipps
und der Vollständigkeit halber

Rostrot

Hobby Programmierer u. "Komponist"
https://www.youtube.com/channel/UCRuq2bapBxHV9ZA1tPI223g

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Manfred X
Datum: 15.03.14 16:11

Danke für den Hinweis!
Das werde ich probieren ...

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Rostrot
Datum: 16.03.14 14:04

Hm

sieht kompliziert aus

Hatte halt diesen Tipp

http://www.vbarchiv.net/tipps/tipp_1986-alle-selektierten-eintr-ge-einer-listbox-l-schen.html

zum Löschen mehrerer Listbox_Einträge gefunden gefunden,
konnte aber nur jeweils einen markieren und dann löschen.

Diesem Thred hier verdanke ich "Selectionmode-Eigenschaft",
die die Listbox auch hat, im Gegensatz zu manchem Blödsinn, den man,
wie "Multiselct = True", im Netz auch findet.

das brachte mich dann zu dem mir genügenden
Einzeiler

Gruß Rostrot

Hobby Programmierer u. "Komponist"
https://www.youtube.com/channel/UCRuq2bapBxHV9ZA1tPI223g

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Manfred X
Datum: 16.03.14 15:27

Die Verwendung ist aber einfach.
Klasse in das Projekt aufnehmen, alles übersetzen und bei Bedarf
existierende Listboxen durch das neue Control ersetzen.

Es dient nur dem einen Zweck, während der Mehrfachauswahl durch Betätigung
der Umschalt/Pfeil-Tasten das jeweils zuletzt ausgewählte Item über eine
zusätzliche Eigenschaft verfügbar zu machen - egal ob man von "unten" nach "oben"
oder von "oben" nach "unten" markiert. (Dadurch wird die Anzeige von
selektionsrelevanten Zusatzinformationen zum jeweils gewählten Item in einem
zweiten Control - z.b. Textbox, Picturebox - möglich.)

Beitrag wurde zuletzt am 16.03.14 um 15:30:55 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Listbox - Datenbindung - Multiselection: Wahl des Current-Item 
Autor: Rostrot
Datum: 17.03.14 16:50

Jo, Danke,
mir fällt da auch gerade ne
Verwendung für ein aktuelles
Projekt ein

Gruß

Rostrot

Hobby Programmierer u. "Komponist"
https://www.youtube.com/channel/UCRuq2bapBxHV9ZA1tPI223g

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-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