Здравствуйте, товарищи программисты! Есть на форме ListBox1 и TreeView1. при выделении определённого нода TreeView1 ListView1 заполняется соответствующими значениями. Т.е. TreeView1 содержит группы, а ListView1 содержит значения в этих группах. Пытаюсь реализовать перетаскивание содержимого в группах между группами. Т.е. берём элемент в ListBox1, тащим его к дереву с нодами и... Нод не выделяется, т.е. хотелось бы получить значение выделенного нода. Нашёл на msdn примеры и немного переделал.
Вот события
Код | Private Sub ListView_ItemDrag(ByVal sender As Object, ByVal e As _ System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
Dim myItems(sender.SelectedItems.Count - 1) As ListViewItem Dim i As Integer = 0
' Loop though the SelectedItems collection for the source. For Each myItem In sender.SelectedItems ' Add the ListViewItem to the array of ListViewItems. myItems(i) = myItem i = i + 1 Next ' Create a DataObject containg the array of ListViewItems. sender.DoDragDrop(New _ DataObject("System.Windows.Forms.ListViewItem()", myItems), DragDropEffects.Move) End Sub
Private Sub ListView_DragEnter(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter ' Check for the custom DataFormat ListViewItem array. If e.Data.GetDataPresent("System.Windows.Forms.ListViewItem()") Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub
Private Sub ListView_DragDrop(ByVal sender As Object, ByVal e As _ System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop Dim myItems() As ListViewItem = e.Data.GetData("System.Windows.Forms.ListViewItem()") Dim i As Integer = 0
For Each myItem In myItems ' Add the item to the target list. sender.Items.Add(myItems(i).Text)
' Remove the item from the source list. If sender Is ListView1 Then
Else ListView1.Items.Remove(ListView1.SelectedItems.Item(0)) End If i = i + 1 Next End Sub
Private Sub TreeView1_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragEnter If e.Data.GetDataPresent("System.Windows.Forms.ListViewItem()") Then e.Effect = DragDropEffects.Move Else e.Effect = DragDropEffects.None End If End Sub
|
Пока что сделал, чтобы при отпускании мыши появилось новое окно с выбором куда же значение из ListBox1 девать:
Код | Private Sub TreeView1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragDrop FormMoveTask.task = ListView1.SelectedItems.Item(0).Text & ";" & ListView1.SelectedItems.Item(0).SubItems(1).Text & ";" & ListView1.SelectedItems.Item(0).SubItems(2).Text & ";" & ListView1.SelectedItems.Item(0).SubItems(3).Text & ";" & ListView1.SelectedItems.Item(0).SubItems(4).Text FormMoveTask.Show() End Sub
|
Наверно нужно что-то делать с указателем мыши в предпоследней процедуре (TreeView1_DragEnter), чтобы появилось возможность при наведении выделять нужный нод. Спасибо. |