Moving listview items

N

Nick

Hi there,

I'm trying to implement drag-drop for my listview control in large icon
view mode. Unfortunately the order of the items gets completely messed up
upon inserting the item back into the listview, removing the item obviously
keeps everything fine but the second I use insert the item is added to the
*end* of the listview. Does anyone have any tips on how I can solve this
issue??

Call Items.Remove(SourceItem)
Call Items.Insert(0,SourceItem)
^Causes the item to be added to the end of the listview!

Thanks loads in advance.

Nick.
 
N

Nick

Hi there,
ListView.Sorting Property = SortOrder.None (default)?

I've tried that but it doesn't seem to have the desired effect, each of
my listview items text property is set to it's index, this occurs every time
an item is scrolled into view. I do not want any other text other than the
force index of the item to be displayed.

So when the listview attempts to sort the items I end up with the
obvious,

0, 1, 10, 100, 101, 102.... and so on and so fourth and such like.

I've just come across a method where you send the message
LVM_SETITEMPOSITION to the listview and the item should go to the position
that you desire, and as I have AutoArrange set to True it should then be
tidied up. But unfortunately I only seem to be able to get it to go to
index 0 or 1, probably due to some issue with my routines....

'~~~~~~~~~~~~~~

<DllImport("user32.dll", EntryPoint:="SendMessageA")> _
Public Shared Function sendMessage(ByVal iHandle As IntPtr, ByVal iMessage
As Integer, ByVal iWParam As Integer, ByVal iLParam As Long) As Integer
End Function

<DllImport("kernel32.dll", EntryPoint:="RtlMoveMemory")> _
Public Shared Sub MoveMemory(ByVal iDestination As Integer, ByVal iSource As
Object, ByVal iLength As Integer)
End Sub

'Macros
Public Shared Function MAKELONG(ByVal iLow As Integer, ByVal iHigh As
Integer) As Long
Return (LOWORD(iLow) Or (&H10000 * LOWORD(iHigh)))
End Function

Public Shared Function LOWORD(ByVal iValue As Long) As Integer
Dim pIntRetVal As Integer
Call MoveMemory(pIntRetVal, iValue, 2)
Return (pIntRetVal)
End Function

'~~~~~~~~~~~~~~

Call Win32Utility.sendMessage(<listview handle>, LVW_SETITEMPOSITION, <item
index>, MAKELONG(<destination X>, <destination Y>))

'~~~~~~~~~~~~~~

^ Presumably this would do as I'm hoping and move the position of the
item to whereever I desire, but it doesn't seem to be doing that, any ideas
on what I might be doing wrong??

Nick.
 
Q

Qwert

Lol, i don't know if the following will help you but:

When I create a listview in view mode 'View.Details', the 'Items.Insert'
works correctly. However,
when I create a listview in view mode 'View.LargeIcons', 'Items.Insert' does
not work and the listview sorts the items as it sees fit.

However ( again ), if you create a listview, set the view to 'View.Details',
insert items, add a button to your form that can switch the listview.view
mode to 'View.LargeIcons', then the items are not sorted.

So, whenever you insert new items, turn view mode to 'View.Details' and then
turn it back...hmmm.
 
N

Nick

Hi there,
When I create a listview in view mode 'View.Details', the 'Items.Insert'
works correctly. However,
when I create a listview in view mode 'View.LargeIcons', 'Items.Insert'
does not work and the listview sorts the items as it sees fit.

However ( again ), if you create a listview, set the view to
'View.Details', insert items, add a button to your form that can switch
the listview.view mode to 'View.LargeIcons', then the items are not
sorted.

So, whenever you insert new items, turn view mode to 'View.Details' and
then turn it back...hmmm.

Well that just kind of confirms where I'm at, you can't get it to put
the items in the correct order automatically. Which is pretty lame really
considering the Index of the item is actually correct when it gets added to
the end, so how an item with index 0 can appear after an item of index 160 I
don't know!! It seems pretty silly.

I'm sure the answer lies in sending the correct message and as if by
magic the item should move, it's just getting the declarations etc. correct!

Nick.
 
N

Nick

Hi again,

Strangely if I use begin and end update the item stays in it's original
position with the new index number!!! Very weird!

Nick.
 
N

Nick

Weyhey, I finally got the repositioning of the item to work, so in
combination with begin and end update I have a working solution. Thanks for
your help!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top