idalton
asked on
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
Any help would be appreciated
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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
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
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
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.Select
i = i - 1
If i >= 0 Then
lst.Items.RemoveAt(lst.Sel
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.Select
i = i + 1
If i <= lst.Items.Count - 1 Then
lst.Items.RemoveAt(lst.Sel
lst.Items.Insert(i, po_listitem)
lst.SelectedIndex = i
Else
Beep()
End If
End Sub