Member 11856456 Ответов: 1

ListBox элемент перетащите элементы, чтобы двигаться в разных местах в этом списке


Я пытаюсь понять,как использовать событие перетаскивания для переключения порядка элементов списка. каждый раз, когда я пытаюсь использовать свой код, он продолжает давать мне круг с линией через него. что бы я ни делал, я не могу заставить их двигаться.

Private Sub ListBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown

       Dim index As Integer = ListBox1.IndexFromPoint(e.X, e.Y)
       Dim s As String = ListBox1.Items(index).ToString()
       Dim dde1 As DragDropEffects = DoDragDrop(s, DragDropEffects.Move)

       If dde1 = DragDropEffects.All Then
           ListBox1.Items.RemoveAt(ListBox1.IndexFromPoint(e.X, e.Y))
       End If


   End Sub
   Private Sub ListBox1_DragOver(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter

       e.Effect = DragDropEffects.All
   End Sub

   Private Sub ListBox1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop


       If e.Data.GetDataPresent(DataFormats.Text) Then
           e.Effect = DragDropEffects.Move
           ListBox1.SelectedIndex = ListBox1.IndexFromPoint(ListBox1.PointToClient(New Point(e.X, e.Y)))
       End If
       Dim str As String = DirectCast(e.Data.GetData(DataFormats.StringFormat), String)
       ListBox1.Items.Insert(ListBox1.SelectedIndex, str)


   End Sub


Что я уже пробовал:

изменено. переместить в. копировать, но я все равно получаю тот же круг с линией через него.

Michael_Davies

Вы установили свойство AllowDrop в True в списке?

Member 11856456

да, было высказано предположение, что мой код ошибочен, потому что теперь он позволяет мне перетаскивать его, но ничего не происходит. Я хочу переставить список так, чтобы у меня были определенные элементы в новой позиции / индексе

Member 11856456

Я сделал это дальше, проблема в том, что после того, как его место в соответствующем индексе будет скопировано, он копирует тот же текст, делая дубликат, но удаляет другой текст. Я перепечатываю новый код.

1 Ответов

Рейтинг:
1

Maciej Los

Я бы посоветовал прочитать это: Реализация перетаскивания в Visual Basic .NET[^]

Что касается вашего кода...
Внутри ListBox1_DragDrop процедура вы должны добавить эту строку:

Dim myitem = DataFormats.Text
ListBox1.Items.Add(mtitem)

Приведенный выше код позволяет вам скопировать элемент. Теперь вы должны предоставить код для удаления элемента, который был перемещен Беном.