| |
VB.NET - Ein- und UmsteigerListbox - 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. | |
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! | |
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 ...
| |
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. | |
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. | |
| 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 |
|
|
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. Weitere InfosTipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|
|
|
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
|
|