Problem beim Verschieben von ListViewItems

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Khartak.

    Problem beim Verschieben von ListViewItems

    Hallo zusammen,

    ich habe Probleme mit meiner Funktion.
    Und zwar schiebt diese Funktion ein ListViewItem entweder um eine Zeile nach oben oder um eine Zeile nach unten. Ich löse die Funktion in meinem Fall im KeyDown Ereignis der ListView aus.
    Das komische ist, dass beim verschieben nach UNTEN alles problemlos abläuft. Aber wenn ich ein Item nach OBEN verschiebe, gelingt das zwar, jedoch nur genau ein Mal! Mir fällt direkt auf, dass das verschobene Item auch keinen Fokus hat. Ich müsste es also per Maus auswählen und dann erneut die Funktion auslösen. Kann mir da jemand weiterhelfen?

    VB.NET-Quellcode

    1. Private Sub MoveListViewItem(ByRef Lvw As ListView, ByVal ItemIndex As Integer, ByVal MoveDown As Boolean)
    2. Dim HoldItem As ListViewItem = Lvw.Items(ItemIndex)
    3. Lvw.Items.RemoveAt(ItemIndex)
    4. If MoveDown = False Then
    5. If ItemIndex > 0 Then
    6. Lvw.Items.Insert(ItemIndex - 1, HoldItem)
    7. Else
    8. Lvw.Items.Insert(ItemIndex, HoldItem)
    9. End If
    10. Else
    11. If (ItemIndex + 1) <= Lvw.Items.Count Then
    12. Lvw.Items.Insert(ItemIndex + 1, HoldItem)
    13. Else
    14. Lvw.Items.Insert(ItemIndex, HoldItem)
    15. End If
    16. End If
    17. End Sub


    Aufruf:

    VB.NET-Quellcode

    1. MoveListViewItem(ListView1, ListView1.SelectedItems(0).Index, False)


    Gruß
    Tim
    Lass mich raten: Du arbeitest mit den Pfeiltasten direkt. Arbeite zusätzlich mit z.B. Alt und dann klappt das, weil die Pfeiltasten allein natürlich Deine Selektion ändern.

    VB.NET-Quellcode

    1. Private Sub ListView1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListView1.KeyDown
    2. If e.KeyCode = Keys.Down AndAlso e.Alt Then MoveListViewItem(ListView1, ListView1.SelectedIndices(0), True)
    3. If e.KeyCode = Keys.Up AndAlso e.Alt Then MoveListViewItem(ListView1, ListView1.SelectedIndices(0), False)
    4. End Sub

    Und SelectedItems(0).Index kannst Du durch SelectedIndices(0) ersetzen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    WOW! Einfach nur super! Danke VaporiZed. Das hat echt geholfen.

    Ja ich erinnere mich, dass ich an einer anderen Stelle auch ein Problem mit den bloßen Pfeiltasten hatte.
    Da hatte ich ein Control geschrieben in dem man unter Anderem Child-Labels per Pfeiltasten verschieben kann (kleiner Label-Designer für Labeldrucker).
    Dort habe ich dann die Strg. Taste hinzugezogen. Nur hätte ich das hier bei dem ListView nicht erwartet. Zumal die Pfeiltasten mir den Focus aus meinem Control genommen hatten, da war der Grund offensichtlich.

    Danke auch an ErfinderDesRades.
    PS ich habe damals deine Tipps zur Anwendung von typisierten DataSets beherzigt und will diese seit dem nicht mehr missen!