Connecting Tech Pros Worldwide Forums | Help | Site Map

Moving listview items

Nick
Guest
 
Posts: n/a
#1: Nov 21 '05
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.



Qwert
Guest
 
Posts: n/a
#2: Nov 21 '05

re: Moving listview items


ListView.Sorting Property = SortOrder.None (default)?

"Nick" <nospam@altavente.com> schreef in bericht
news:ewK0jY2EFHA.548@TK2MSFTNGP14.phx.gbl...[color=blue]
> 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.
>[/color]


Nick
Guest
 
Posts: n/a
#3: Nov 21 '05

re: Moving listview items


Hi there,
[color=blue]
> ListView.Sorting Property = SortOrder.None (default)?[/color]

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.


Qwert
Guest
 
Posts: n/a
#4: Nov 21 '05

re: Moving listview items


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" <nospam@altavente.com> schreef in bericht
news:%23ApBn32EFHA.1348@TK2MSFTNGP14.phx.gbl...[color=blue]
> Hi there,
>[color=green]
>> ListView.Sorting Property = SortOrder.None (default)?[/color]
>
> 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.
>[/color]


Nick
Guest
 
Posts: n/a
#5: Nov 21 '05

re: Moving listview items


Hi there,
[color=blue]
> 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.[/color]

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.


Nick
Guest
 
Posts: n/a
#6: Nov 21 '05

re: Moving listview items


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" <nospam@altavente.com> wrote in message
news:%2371cYR3EFHA.624@TK2MSFTNGP09.phx.gbl...[color=blue]
> Hi there,
>[color=green]
>> 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.[/color]
>
> 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.
>[/color]


Nick
Guest
 
Posts: n/a
#7: Nov 21 '05

re: Moving listview items


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" <nospam@altavente.com> wrote in message
news:%23VVMQf3EFHA.2832@TK2MSFTNGP14.phx.gbl...[color=blue]
> 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" <nospam@altavente.com> wrote in message
> news:%2371cYR3EFHA.624@TK2MSFTNGP09.phx.gbl...[color=green]
>> Hi there,
>>[color=darkred]
>>> 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.[/color]
>>
>> 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.
>>[/color]
>
>[/color]


Closed Thread