25-08-16, 12:26 AM
اخي الكريم اعمل مشروع جديد و اضف له اثنين DataGridView
اذهب الى الخاصية AllowDrop و اجعلها True
في بداية النموذج عرف المتعيرات التالية
سنحتاج الى معالجة 4 احداث على التوالي (MouseMove,MouseDown,DragOver,DragDrop) لكل اداة على حدا
لذا ارتايت ان اعمل وظيفة مشتركة وفق بارمترات
الوظيفة الاولى
الوظيفة الثانية
الوظيفة الثالثة
الحدث الرابع و هو مشترك بين الاداتين بدون بارمترات
بعد كتابة الوظائف السابقة نذهب الى الحدث الموافق لكل اداة و نمرر البارميتر المناسب
احداث DataGridView1
احداث DataGridView2
و عملت هذا الاجراء البسيط لاضافة بعض البيانات الى كلتا الاداتين استدعيه في بداية تحميل النموذج
الان شغل النموذج و جرب نقل البيانات بين الاداتين
اذهب الى الخاصية AllowDrop و اجعلها True
في بداية النموذج عرف المتعيرات التالية
PHP كود :
Private dragBoxFromMouseDown As Rectangle
Private rowIndexFromMouseDown As Integer
Private rowIndexOfItemUnderMouseToDrop As Integer
سنحتاج الى معالجة 4 احداث على التوالي (MouseMove,MouseDown,DragOver,DragDrop) لكل اداة على حدا
لذا ارتايت ان اعمل وظيفة مشتركة وفق بارمترات
الوظيفة الاولى
PHP كود :
Private Sub MoseMove(sender As Object, e As MouseEventArgs, ByVal DataGrid As DataGridView)
If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
If dragBoxFromMouseDown <> Rectangle.Empty AndAlso Not dragBoxFromMouseDown.Contains(e.X, e.Y) Then
Dim dropEffect As DragDropEffects = DataGrid.DoDragDrop(DataGrid.Rows(rowIndexFromMouseDown), DragDropEffects.Move)
End If
End If
End Sub
الوظيفة الثانية
PHP كود :
Private Sub MoseDown(sender As Object, e As MouseEventArgs, ByVal DataGrid As DataGridView)
rowIndexFromMouseDown = DataGrid.HitTest(e.X, e.Y).RowIndex
If rowIndexFromMouseDown <> -1 Then
Dim dragSize As Size = SystemInformation.DragSize
dragBoxFromMouseDown = New Rectangle(New Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize)
Else
dragBoxFromMouseDown = Rectangle.Empty
End If
End Sub
الوظيفة الثالثة
PHP كود :
Private Sub DrageDrop(sender As Object, e As DragEventArgs, ByVal DragGrid As DataGridView, DropGrid As DataGridView)
Dim clientPoint As Point = DragGrid.PointToClient(New Point(e.X, e.Y))
rowIndexOfItemUnderMouseToDrop = DragGrid.HitTest(clientPoint.X, clientPoint.Y).RowIndex
If e.Effect = DragDropEffects.Move Then
Dim rowToMove As DataGridViewRow = TryCast(e.Data.GetData(GetType(DataGridViewRow)), DataGridViewRow)
If rowToMove.Index < 0 Then
Return
End If
If rowIndexFromMouseDown < rowIndexOfItemUnderMouseToDrop Then
DropGrid.Rows.RemoveAt(rowIndexFromMouseDown)
DragGrid.Rows.Insert(rowIndexOfItemUnderMouseToDrop - 1, rowToMove)
ElseIf rowIndexFromMouseDown > rowIndexOfItemUnderMouseToDrop Then
DropGrid.Rows.RemoveAt(rowIndexFromMouseDown)
DragGrid.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove)
End If
End If
End Sub
الحدث الرابع و هو مشترك بين الاداتين بدون بارمترات
PHP كود :
Private Sub DataGridView1_DragOver(sender As Object, e As DragEventArgs) Handles DataGridView1.DragOver, DataGridView2.DragOver
e.Effect = DragDropEffects.Move
End Sub
بعد كتابة الوظائف السابقة نذهب الى الحدث الموافق لكل اداة و نمرر البارميتر المناسب
احداث DataGridView1
PHP كود :
Private Sub DataGridView1_MouseMove(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseMove
MoseMove(DataGridView1, e, DataGridView1)
End Sub
Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown
MoseDown(DataGridView1, e, DataGridView1)
End Sub
Private Sub DataGridView1_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView1.DragDrop
DrageDrop(DataGridView1, e, DataGridView1, DataGridView2)
End Sub
احداث DataGridView2
PHP كود :
Private Sub DataGridView2_MouseMove(sender As Object, e As MouseEventArgs) Handles DataGridView2.MouseMove
MoseMove(DataGridView2, e, DataGridView2)
End Sub
Private Sub DataGridView2_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView2.MouseDown
MoseDown(DataGridView2, e, DataGridView2)
End Sub
Private Sub DataGridView2_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView2.DragDrop
DrageDrop(DataGridView2, e, DataGridView2, DataGridView1)
End Sub
و عملت هذا الاجراء البسيط لاضافة بعض البيانات الى كلتا الاداتين استدعيه في بداية تحميل النموذج
PHP كود :
Private Sub AddSomeRows()
Dim col1 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
Dim col2 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
Dim col3 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
Dim col4 As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
col1.HeaderText = "Column1"
col1.Name = "Column1"
col2.HeaderText = "Column2"
col2.Name = "Column2"
col3.HeaderText = "Column3"
col3.Name = "Column3"
col4.HeaderText = "Column4"
col4.Name = "Column4"
DataGridView1.Columns.AddRange(New DataGridViewColumn() {col1, col2})
DataGridView2.Columns.AddRange(New DataGridViewColumn() {col3, col4})
Dim Data(,) As String = New String(2, 1) {{1, "Alkateb"}, {2, "Abulaeth"}, {3, "Alshaki"}}
Dim Data2(,) As String = New String(2, 1) {{1, "Suaud"}, {2, "AboLayla"}, {3, "Alwadi"}}
Dim s As Integer = 0
While s < Data.Length - 3
Dim row1 As DataGridViewRow = DirectCast(DataGridView1.Rows(0).Clone(), DataGridViewRow)
Dim row2 As DataGridViewRow = DirectCast(DataGridView2.Rows(0).Clone(), DataGridViewRow)
row1.Cells(0).Value = Data.GetValue(s, 0)
row1.Cells(1).Value = Data.GetValue(s, 1)
DataGridView1.Rows.Add(row1)
'
row2.Cells(0).Value = Data2.GetValue(s, 0)
row2.Cells(1).Value = Data2.GetValue(s, 1)
DataGridView2.Rows.Add(row2)
s += 1
End While
End Sub
الان شغل النموذج و جرب نقل البيانات بين الاداتين
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


