Click to See Complete Forum and Search --> : listboxes


January 3rd, 2000, 06:47 PM
how do I make it so I have one listbox, with a certian number of elements, and the user can drag one element to a position in the listbox before another element. For example, in this listbox there are the elements "A" , "B" , "C",
and "D." They are in the order A, B, C, D. How do i make it so that the user can click on d, drag it up above b, click again, so that the order now would be A, D, B, C?

Sigal Laniado
January 4th, 2000, 01:27 AM
Here is an example for what you want:
Private Sub List1_DragDrop(Source As Control, X As Single, Y As Single)
On Local Error Resume Next
If Source.List(Source.ListIndex) = "" Then Exit Sub


Dim lCount As Long, lItemPositionY As Long
Dim lItemHeight As Long

lItemHeight = SendMessage(List1.hWnd, LB_GETITEMHEIGHT, 0, 0)
Dim nNewPlace As Integer

lCount = List1.ListCount
nNewPlace = lCount
For nItemIndex = 1 To lCount
lItemPositionY = nItemIndex * lItemHeight * Screen.TwipsPerPixelY
If Y < 0 Or Y = 0 Then
nNewPlace = 0
Exit For
End If
If Y < lItemPositionY Then
nNewPlace = nItemIndex
Exit For
End If

Next nItemIndex



List1.AddItem Source.List(Source.ListIndex), NewPlace 'Adds the item to the target

Source.RemoveItem Source.ListIndex 'Removes the item from the source
End Sub