TreeView.Как определить на каком узле при перетаскивании была отпущена кнопка мыши? - VB

Узнай цену своей работы

Формулировка задачи:

Я пытаюсь сделать в TreeView возможнность перетаскивания узлов с изменением их подчиненности. Вот возникло несколько вопросов: 1. При выборе узла для перетаскивания (событие MouseDown), выбранный узел, вроде, подсвечивается курсором, но SelectedItem остается без изменения. Понятно, что это изменение происходит при событии NodeClick, которое происходит после MouseUp, но как тогда отлавливать узел, который я собирался перетащить? 2. Как определить на каком узле при перетаскивании была отпущена кнопка мыши? Если у кого есть опыт, поделитесь. Заранее, спасибо.

Решение задачи: «TreeView.Как определить на каком узле при перетаскивании была отпущена кнопка мыши?»

textual
Листинг программы
  1. Dim nodDragX as ComctlLib.Node ' dragging node (what Node to move)
  2. Dim oNode as ComctlLib.Node    ' hitting node  (where to move)
  3. Dim inDdrag as Boolean       ' Flag of dragging operation
  4.  
  5. ' Select Node for dragging
  6.  
  7. Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  8. ...Set nodDragX = TreeView1.HitTest(x, y) ' Set the item being dragged.
  9. ...If nodDragX Is Nothing Then Set nodDragX = TreeView1.SelectedItem
  10. End Sub
  11.  
  12. ' Begin Dragging
  13.  
  14. Private Sub TreeView1_MouseMove _
  15. (Button As Integer, Shift As Integer, x As Single, y As Single)
  16. If Not indrag Then ' Check if Drag operation already in process, if not -
  17. ...If Button = vbLeftButton Then ' Signal a Drag operation.
  18. ......indrag = True ' Set the flag to true.
  19. ......      ' Set the drag icon with the CreateDragImage method.
  20. ......TreeView1.DragIcon = TreeView1.SelectedItem.CreateDragImage
  21. ......TreeView1.Drag vbBeginDrag ' Drag operation.
  22. ...End If
  23. End If
  24. End Sub
  25.  
  26. ' Dragging in process
  27.  
  28. Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, state As Integer)
  29. if Source.Name = 'TreeView1' And indrag Then
  30. ...Set tvTreeView1.DropHighlight = tvTreeView1.HitTest(x, y) 'Highlight Nodes you moves over
  31. End If
  32. End Sub
  33.  
  34. ' Drag operation is over
  35.  
  36. Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single)
  37. indrag = False
  38. if Source.Name = 'TreeView1'
  39. ...Set TreeView1.DropHighlight = tvTreeView1.HitTest(x, y)
  40. ...Set oNode = tvTreeView1.HitTest(x, y) ' your destination
  41. ...MoveNode oNode, nodDragX  
  42. End if
  43.      
  44. Private sub MoveNode (oNode as ComctlLib.Node,nodDragX as ComctlLib.Node)
  45. .....< Your code for moving Node nodDragX to oNode>  
  46. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы