Avatar billede Slettet bruger
23. august 2002 - 20:57 Der er 9 kommentarer

Flytte ListView Items op og ned

Jeg har en ListView (lvBurnList), og jeg vil gerne have at man kan flytte emnerne op og ned.

------------
a
b
c
d
e
------------

bruger markerer b og vælger flyt op
-----------
b
a
c
d
e
-------------

Håber det var forståeligt.
Avatar billede kjeld_klit Nybegynder
24. august 2002 - 12:34 #1
Public sSel As String      'Selected Text  (On MouseDown)
Public iSel As Integer      'Selected Index

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    sSel = List1.List(List1.ListIndex)
    iSel = List1.ListIndex
    Me.Caption = sSel
End Sub

Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <> vbLeftButton Then Exit Sub
    Dim sTemp As String
    Dim i As Integer
    Dim iCur As Integer    'Current Index
    iCur = List1.ListIndex
    Do While iCur <> iSel
        If iCur < iSel Then
            List1.List(iSel) = List1.List(iSel - 1)
            List1.List(iSel - 1) = sSel
            iSel = iSel - 1
        Else
            List1.List(iSel) = List1.List(iSel + 1)
            List1.List(iSel + 1) = sSel
            iSel = iSel + 1
        End If
    Loop
End Sub
Avatar billede sion Nybegynder
24. august 2002 - 13:28 #2
Ja, det er jo ikke helt den funktion som mitzy17 efterspørger... det er nemlig meget bedre!! Fantastisk! Den kode har jeg kikket mangt og meget efter :D
Avatar billede Slettet bruger
24. august 2002 - 14:36 #3
Så det vil sige at man bare skal flytte emnet op/ned?? Genialt.
Jeg tester det lige.
Avatar billede Slettet bruger
24. august 2002 - 14:37 #4
Jamen det var til en ListView, ikke en ListBox
Avatar billede kjeld_klit Nybegynder
24. august 2002 - 21:13 #5
OK det gik måske for hurtigt med at klippe fra noget jeg havde ;-)

Man kan åbenbart ikke uden videre ændre koden til en ListView i stedet for, det er som om at MouseMove ikke virker på samme måde som i en ListBox.

Men her er koden og det virker også - men ikke så overbevisende som i ListBox - man skal somme tider trække musen til siden for at aktivere MousMove. Det er muligt at ved at ændre koden lidt kan få den helt rigtig, men jeg har ikke tid lige nu!!

Public sSelLV As String
Public iSelLV As Integer

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    sSelLV = ListView1.ListItems.Item(ListView1.SelectedItem.Index)
    iSelLV = ListView1.SelectedItem.Index
    ListView1.HoverSelection = True
End Sub

Private Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button <> vbLeftButton Then Exit Sub
    Dim iCur As Integer    'Current Index
    iCur = ListView1.SelectedItem.Index
    Do While iCur <> iSelLV
    Me.Caption = "iCur :" & iCur & " iSelLV :" & iSelLV
        If iCur < iSelLV Then
            ListView1.ListItems.Item(iSelLV) = ListView1.ListItems.Item(iSelLV - 1)
            ListView1.ListItems.Item(iSelLV - 1) = sSelLV
            iSelLV = iSelLV - 1
        Else
            ListView1.ListItems.Item(iSelLV) = ListView1.ListItems.Item(iSelLV + 1)
            ListView1.ListItems.Item(iSelLV + 1) = sSelLV
            iSelLV = iSelLV + 1
        End If
    Loop
End Sub

Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    ListView1.HoverSelection = False
End Sub
Avatar billede kjeld_klit Nybegynder
24. august 2002 - 21:15 #6
Me.Caption = "iCur :" & iCur & " iSelLV :" & iSelLV

...skal selvfølgelig ikke være der - det er bare sådan noget jeg gør for at se hvad der egentligt sker;-)
Avatar billede martin_moth Mester
27. august 2002 - 10:23 #7
kjeld_klit > Uhhhhm - det napper jeg lige. Tak for lidt lækker kode!

/martin_moth
Avatar billede martin_moth Mester
27. august 2002 - 10:29 #8
Meeen - det mitzy17 egentligt spørger efter er meget mere simpelt - der skal det markerede element flyttes til top, når man klikker på en knap. Er du interesseret i den kode, mitzy17, skal jeg gerne lave den, men du er måske (ganske forståeligt) mere tilfancy muse-drag-and-drop-funktioner ;o)

/martin_moth
Avatar billede th0mas Nybegynder
06. september 2002 - 16:52 #9
put dette i FlytOpCmd_Click():
ListView.SelectedItem.Index = ListView.SelectedItem.Index - 1
- og dette i FlytNedCmd_Click()
ListView.SelectedItem.Index = ListView.SelectedItem.Index + 1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester