By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,876 Members | 1,239 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,876 IT Pros & Developers. It's quick & easy.

Moving listview items

P: n/a
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.
Nov 21 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
ListView.Sorting Property = SortOrder.None (default)?

"Nick" <no****@altavente.com> schreef in bericht
news:ew*************@TK2MSFTNGP14.phx.gbl...
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.

Nov 21 '05 #2

P: n/a
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.
Nov 21 '05 #3

P: n/a
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.

"Nick" <no****@altavente.com> schreef in bericht
news:%2****************@TK2MSFTNGP14.phx.gbl...
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.

Nov 21 '05 #4

P: n/a
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.
Nov 21 '05 #5

P: n/a
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.

"Nick" <no****@altavente.com> wrote in message
news:%2***************@TK2MSFTNGP09.phx.gbl...
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.

Nov 21 '05 #6

P: n/a
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!
"Nick" <no****@altavente.com> wrote in message
news:%2****************@TK2MSFTNGP14.phx.gbl...
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.

"Nick" <no****@altavente.com> wrote in message
news:%2***************@TK2MSFTNGP09.phx.gbl...
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.


Nov 21 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.