04-12-15, 12:23 AM
اضف مودل جديد وضع به
وفي الفورم ضع الكود
PHP كود :
Private fromIndex As Integer
Private dragIndex As Integer
Private dragRect As Rectangle
Dim Arrow As Label = Nothing
Dim frm As Object
Public Sub Dragable(ByVal DGV As DataGridView)
frm = DGV.Parent
DGV.AllowDrop = True
AddHandler DGV.DragOver, AddressOf DragOver
AddHandler DGV.MouseDown, AddressOf MouseDown
AddHandler DGV.DragDrop, AddressOf DragDrop
AddHandler DGV.MouseMove, AddressOf MouseMove
AddHandler DGV.MouseUp, AddressOf MouseUp
End Sub
Private Sub DragDrop(sender As Object, e As DragEventArgs)
Dim p As Point = sender.PointToClient(New Point(e.X, e.Y))
dragIndex = sender.HitTest(p.X, p.Y).RowIndex
If (e.Effect = DragDropEffects.Move) Then
Dim dragRow As DataGridViewRow = e.Data.GetData(GetType(DataGridViewRow))
sender.Rows.RemoveAt(fromIndex)
Try
sender.Rows.Insert(dragIndex, dragRow)
sender.ClearSelection()
sender.Rows(dragIndex).Selected = True
Catch ex As Exception
sender.Rows.Insert(fromIndex, dragRow)
End Try
Arrow.Dispose()
End If
End Sub
Private Sub DragOver(sender As Object, e As DragEventArgs)
e.Effect = DragDropEffects.Move
If Not IsNothing(Arrow) Then
Dim x As Integer = sender.HitTest(sender.findform.PointToClient(New Point(e.X, e.Y)).X, sender.findform.PointToClient(New Point(e.X, e.Y)).Y).RowIndex
If x = -1 Then Arrow.Visible = False Else Arrow.Visible = True
Dim iii As Integer = sender.Top + sender.ColumnHeadersHeight
Dim num As Double = 0
For i = 0 To x
If i = x Then
num = sender.rows(i).height / 2 - Arrow.Height
Else
iii = iii + sender.Rows(i).Height
End If
Next
Arrow.Top = iii + num
End If
End Sub
Private Sub MouseDown(sender As Object, e As MouseEventArgs)
fromIndex = sender.HitTest(e.X, e.Y).RowIndex
If fromIndex > -1 Then
Dim dragSize As Size = SystemInformation.DragSize
dragRect = New Rectangle(New Point(e.X - (dragSize.Width / 2), _
e.Y - (dragSize.Height / 2)), _
dragSize)
DrowArrow(sender)
Else
dragRect = Rectangle.Empty
End If
End Sub
Private Sub MouseUp(sender As Object, e As MouseEventArgs)
Arrow.Dispose()
End Sub
Private Sub MouseMove(sender As Object, e As MouseEventArgs)
If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
If (dragRect <> Rectangle.Empty _
AndAlso Not dragRect.Contains(e.X, e.Y)) Then
sender.DoDragDrop(sender.Rows(fromIndex), _
DragDropEffects.Move)
End If
End If
End Sub
Private Sub DrowArrow(sender As DataGridView)
Dim lb As New Label
lb.Font = New Font("Arial", 15)
lb.Text = "◄"
lb.BackColor = Color.Yellow
lb.ForeColor = Color.Red
lb.AutoSize = True
lb.BringToFront()
Arrow = lb
If Not IsNothing(frm) Then sender.controls.add(Arrow)
Arrow.Left = sender.left + sender.width - 1 - Arrow.Width
End Sub
وفي الفورم ضع الكود
PHP كود :
Dragable(DataGridView1)