Serialcoder en Français Serialcoder in English
TEL : +33 (0)9 72 13 15 17

Windows Forms FAQ resources

24. Windows Forms TreeView

24.2 How do I make the TreeView scroll when I drag an item to the top or bottom?


When you drag an item within the TreeView, you can handle the DragOver event for a drag-drop. If you want to drag-drop into a spot that's not currently visible, you can scroll the TreeView by handling the DragOver event:

[C#]     
     private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
     {
          TreeView tv = sender as TreeView;
          Point pt = tv.PointToClient(new Point(e.X,e.Y));
               
          int delta = tv.Height - pt.Y;
          if ((delta < tv.Height / 2) && (delta > 0))
          {
               TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
               if (tn.NextVisibleNode != null)
                    tn.NextVisibleNode.EnsureVisible();
          }
          if ((delta > tv.Height / 2) && (delta < tv.Height))
          {
               TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
               if (tn.PrevVisibleNode != null)
                    tn.PrevVisibleNode.EnsureVisible();
          }
     }

[VB.NET]
Private Sub treeView1_DragOver(sender As Object, e As System.Windows.Forms.DragEventArgs)

If TypeOf sender is TreeView Then
     Dim tv As TreeView = CType(sender, TreeView)
     Dim pt As Point = tv.PointToClient(New Point(e.X, e.Y))
     Dim delta As Integer = tv.Height - pt.Y
     If delta < tv.Height / 2 And delta > 0 Then
          Dim tn As TreeNode = tv.GetNodeAt(pt.X, pt.Y)
          If Not (tn.NextVisibleNode Is Nothing) Then
          tn.NextVisibleNode.EnsureVisible()
          End If
     End If
     If delta > tv.Height / 2 And delta < tv.Height Then
          Dim tn As TreeNode = tv.GetNodeAt(pt.X, pt.Y)
          If Not (tn.PrevVisibleNode Is Nothing) Then
          tn.PrevVisibleNode.EnsureVisible()
          End If
     End If
End If
End Sub 'treeView1_DragOver