vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · ListBox & ComboBox   |   VB-Versionen: VB2005, VB200820.01.09
ListBox-Einträge innerhalb der Liste verschieben

Vier nützliche Funktionen zum Verschieben eines ListBox-Eintrags innerhalb der Liste.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  20.137 
www.tools4vb.deSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Der nachfolgende Code zeigt, wie sich der aktuell selektierte Eintrag innerhalb eines ListBox-Controls verschieben lässt:

  • an den Anfang der Liste
  • eine Position nach oben
  • eine Position nach unten
  • an das Ende der Liste

Der Eintrag selbst bleibt nach dem Verschieben weiterhin markiert, so dass man z.B. durch mehrfaches Klicken auf einen Button den aktuellen Eintrag erneut nach oben/unten verschieben kann.

Erstellen Sie ein neues Projekt und plazieren folgende Controls auf die Form:

  • ListBox (ListBox1)
  • CommandButton (btnFirst)
  • CommandButton (btnPrev)
  • CommandButton (btnNext)
  • CommandButton (btnLast)

Fügen Sie nachfolgenden Code in den Codeteil der Form ein und starten anschließend das Beispielprojekt, um die "Verschiebe"-Funktionen zu testen.

Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' ListBox füllen
    With ListBox1.Items
      For i As Integer = 1 To 100
        .Add("Eintrag " & CStr(i))
      Next
    End With
 
    btnFirst.Text = "|<"
    btnPrev.Text = "<"
    btnNext.Text = ">"
    btnLast.Text = ">|"
  End Sub
  ''' <summary>
  ''' Verschiebt den aktuell selektierten Eintrag an die 1. Position
  ''' </summary>
  Private Sub lb_MoveFirst(ByVal sender As ListBox)
    With sender
      Dim index As Integer = .SelectedIndex
      If index > 0 Then
        Dim oTemp As Object = .SelectedItem
        .Items.RemoveAt(index)
        .Items.Insert(0, oTemp)
        .SelectedIndex = 0
      End If
    End With
  End Sub
  ''' <summary>
  ''' Verschiebt den aktuell selektierten Eintrag um eine Position nach oben
  ''' </summary>
  ''' <param name="sender"></param>
  ''' <remarks></remarks>
  Private Sub lb_MovePrev(ByVal sender As ListBox)
    With sender
      Dim index As Integer = .SelectedIndex
      If index > 0 Then
        Dim oTemp As Object = .SelectedItem
        .Items.RemoveAt(index)
        .Items.Insert(index - 1, oTemp)
        .SelectedIndex = index - 1
      End If
    End With
  End Sub
  ''' <summary>
  ''' Verschiebt den aktuell selektierten Eintrag um eine Position nach unten
  ''' </summary>
  Private Sub lb_MoveNext(ByVal sender As ListBox)
    With sender
      Dim index As Integer = .SelectedIndex
      If index < .Items.Count - 1 Then
        Dim oTemp As Object = .SelectedItem
        .Items.RemoveAt(index)
        .Items.Insert(index + 1, oTemp)
        .SelectedIndex = index + 1
      End If
    End With
  End Sub
  ''' <summary>
  ''' Verschiebt den aktuell selektierten Eintrag an das Ende der Liste
  ''' </summary>
  Private Sub lb_MoveLast(ByVal sender As ListBox)
    With sender
      Dim index As Integer = .SelectedIndex
      If index < .Items.Count - 1 Then
        Dim oTemp As Object = .SelectedItem
        .Items.RemoveAt(index)
        .Items.Add(oTemp)
        .SelectedIndex = .Items.Count - 1
      End If
    End With
  End Sub
  Private Sub btnFirst_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnFirst.Click
 
    ' aktuellen Eintrag ganz nach oben schieben
    lb_MoveFirst(ListBox1)
  End Sub
  Private Sub btnPrev_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnPrev.Click
 
    ' Eintrag um eine Position nach oben schieben
    lb_MovePrev(ListBox1)
  End Sub
 
  Private Sub btnNext_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnNext.Click
 
    ' Eintrag um eine Position nach unten schieben
    lb_MoveNext(ListBox1)
  End Sub
  Private Sub btnLast_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnLast.Click
 
    ' Eintrag an das Ende der Liste schieben
    lb_MoveLast(ListBox1)
  End Sub
End Class