Move Items Up & Down In a Listbox (VB.Net)

I have a listbox with values and 2 buttons(UP & DOWN) to the side of it. Where a user can change the order of the values. I have been fooling around with it and can't get it to work. If they have an item selected and they keep pressing the UP button the item should move closer to the top.

Any help would be appreciated

idaltonAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

johan_asplundCommented:
Hello

I just made a small example that you can try

    Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click

        Dim item As Object
        Dim index As Integer
        item = ListBox1.SelectedItem()
        index = ListBox1.Items.IndexOf(item)

        ListBox1.Items.Insert(index - 1, item)
        ListBox1.SelectedIndex = index - 1
        ListBox1.Items.RemoveAt(index + 1)


    End Sub

    Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click
        Dim item As Object
        Dim index As Integer
        item = ListBox1.SelectedItem()
        index = ListBox1.Items.IndexOf(item)

        ListBox1.Items.Insert(index + 2, item)
        ListBox1.SelectedIndex = index + 2
        ListBox1.Items.RemoveAt(index)


    End Sub



Br
Johan

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Joe_GriffithCommented:
Here's what I do...

Note that I've filled the list box with objects of type clsSpListItem and the listbox in question is named lst.  

  Private Sub rptUp_Fire() Handles rptUp.Click
    Dim i As Integer
    Dim pi_Index As Integer
    Dim po_ListItem As clsSpListItem

    i = lst.SelectedIndex
    If i < 0 Then Exit Sub
    po_ListItem = CType(lst.Items(lst.SelectedIndex), clsSpListItem)

    i = i - 1
    If i >= 0 Then
      lst.Items.RemoveAt(lst.SelectedIndex)
      lst.Items.Insert(i, po_ListItem)
      lst.SelectedIndex = i
    Else
      Beep()
    End If
  End Sub

  Private Sub rptDown_Fire() Handles rptDown.Click
    Dim i As Integer
    Dim po_listitem As clsSpListItem

    i = lst.SelectedIndex
    If i < 0 Then Exit Sub
    po_listitem = CType(lst.Items(lst.SelectedIndex), clsSpListItem)

    i = i + 1
    If i <= lst.Items.Count - 1 Then
      lst.Items.RemoveAt(lst.SelectedIndex)
      lst.Items.Insert(i, po_listitem)
      lst.SelectedIndex = i
    Else
      Beep()
    End If
  End Sub
Bob LearnedCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: johan_asplund {http:#9609217}

Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

TheLearnedOne
EE Cleanup Volunteer
ScottG_WorkCommented:
I wanted to stop and take a few minutes to modify the above code  by Joe Griffith.  I searched for a while until I found this solution.  I have modified his code to allow both drag and drop features and well as changing the position of the item with the Up/Down Buttons.  Make sure that you set the .AllowDrop property of listbox1 to True and you should be in good shape.  This code also checks to make sure that an item is selected and that the index is within bounds of the total item count.  Thanks again to the original poster for this solution... :)

    Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
        ListBox1.Items.Insert(ListBox1.IndexFromPoint (ListBox1.PointToClient(New Point(e.X, e.Y))), e.Data.GetData _(DataFormats.Text))
        ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
    End Sub
 
    Private Sub ListBox1_DragOver(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DragEventArgs) Handles ListBox1.DragOver
        e.Effect = DragDropEffects.Move
    End Sub
 
    Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
        ListBox1.DoDragDrop(ListBox1.Text, DragDropEffects.All)
    End Sub
    Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnUp.Click
 
        Dim item As Object
        Dim index As Integer
        If ListBox1.SelectedItem <> Nothing Then
            item = ListBox1.SelectedItem()
            index = ListBox1.Items.IndexOf(item)
 
            If index <> 0 Then
                ListBox1.Items.Insert(index - 1, item)
                ListBox1.SelectedIndex = index - 1
                ListBox1.Items.RemoveAt(index + 1)
            End If
        End If
 
    End Sub
 
    Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnDown.Click
        Dim item As Object
        Dim index As Integer
        If ListBox1.SelectedItem <> Nothing Then
            item = ListBox1.SelectedItem()
            index = ListBox1.Items.IndexOf(item)
 
            If index <> ListBox1.Items.Count - 1 Then
                ListBox1.Items.Insert(index + 2, item)
                ListBox1.SelectedIndex = index + 2
                ListBox1.Items.RemoveAt(index)
            End If
        End If
    End Sub

Open in new window

It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.