تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كود السحب والافلات
#1
كيف يمكن نقل محتوى خلية في الداتا جريد الى خلية أخرى عن طريق السحب والافلات
ارجو المساعدة
الرد }}}
تم الشكر بواسطة:
#2
كود :
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
       DataGridView1.AllowDrop = True
   End Sub
   Private CR As Integer, CC As Integer, CV As Object
   Private Sub DataGridView1_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragOver
       e.Effect = DragDropEffects.Move
   End Sub
   Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragDrop
       Dim ClientPoint As Point = DataGridView1.PointToClient(New Point(e.X, e.Y))
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(ClientPoint.X, ClientPoint.Y)
       DataGridView1.Item(CC, CR).Value = Nothing
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       DataGridView1.Item(CC, CR).Value = CV
   End Sub
   Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       CV = DataGridView1.Item(CC, CR).Value : If CV Is Nothing Then Exit Sub
       DataGridView1.DoDragDrop(CV, DragDropEffects.Move)
   End Sub
الرد }}}
#3
الله يسعدك أخي الكريم
لكن لو تكرمت بشرح هذا الكود
الرد }}}
تم الشكر بواسطة: asemshahen5 , 3booody
#4
السلام عليكم ورحمة الله وبركاته

السطر الموجود في حدث التحميل

كود :
DataGridView1.AllowDrop = True

لتمكين خاصية السحب والافلات للأداة

"""""""""""""""""""""""""""""""""""""""""""""""""

لديك ثلاث متغيرات

كود :
Private CR As Integer, CC As Integer, CV As Object
CR و CC متغيران رقميان الغرض منهما الحصول على رقم العمود والصف عند الضغط بزر الماوس على أي خلية
CV من نوع كائن هذا يأخذ القيمة الموجوده في الخلية التي تم ضغط الماوس عليها سواء نصية او رقمية او....الخ

""""""""""""""""""""""""""""""""""""""""""""""""

والكود التالي

كود :
Private Sub DataGridView1_DragOver(ByVal sender As Ob ect, ByVal e As DragEventArgs) Handles DataGridView1.DragOver
       e.Effect = DragDropEffects.Move
   End Sub
هو حدث مرتبط بعملية السحب والافلات عند تحريك الماوس بالبيانات , يتم تغيير مؤشر الماوس بالشكل الذي تضعه ومثل ماتشوف الشكل السابق Move

"""""""""""""""""""""""""""""""""""""""""""""""


كود :
Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       CV = DataGridView1.Item(CC, CR).Value : If CV Is Nothing Then Exit Sub
       DataGridView1.DoDragDrop(CV, DragDropEffects.Move)
   End Sub

حدث الضغط بزر الماوس مع بعض الشروط ,, وهي عند الضغط بالماوس الحصول على النقطة التي تم الضغط عليها والوصول الى الخلية الموجوده في هذه النقطة واضافة رقم العمود الى المتغير CC ورقم الصف الى المتغير CR واضافة قيمة الخلية التي تم الضغط عليها للمتغير CV

""""""""""""""""""""""""""""""""""""""""""""""


كود :
Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragDrop
       Dim ClientPoint As Point = DataGridView1.PointToClient(New Point(e.X, e.Y))
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(ClientPoint.X, ClientPoint.Y)
       DataGridView1.Item(CC, CR).Value = Nothing
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       DataGridView1.Item(CC, CR).Value = CV
   End Sub
واخيرآ هوا حدث السحب والافلات عند ترك زر الماوس يتم اخذ النقطة التي ترك فيها الزر ثم وضع القيمة السابقة وهي CV الى الخلية الجديده ,, ومسح بيانات الخلية التي رقم العمود فيها هو CC ورقم الصف فيها هوا CR لاننا قمنا بتحريك البيانات منها


ان شاء الله يكون الشرح مفهوم اخي؟
الرد }}}
#5
واضح جدا الله يسعدك ويرحم والديك
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5
#6
طيب أخي
هل ممكن أعرف رقم العمود والصف للخلية التي وقع عليها الافلات
حتى أميزها بلون مختلف
الرد }}}
تم الشكر بواسطة: asemshahen5
#7
نعم شوف الكود بعد التعديل وراح تفهم القصد


كود :
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
       DataGridView1.AllowDrop = True
   End Sub
   Private CR As Integer, CC As Integer, CV As Object
   Private Sub DataGridView1_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragOver
       e.Effect = DragDropEffects.Move
   End Sub
   Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles DataGridView1.DragDrop
       Dim ClientPoint As Point = DataGridView1.PointToClient(New Point(e.X, e.Y))
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(ClientPoint.X, ClientPoint.Y)
       DataGridView1.Item(CC, CR).Value = Nothing
       DataGridView1.Item(CC, CR).Style.BackColor = Color.White
       MsgBox("تم سحب القيمة من العمود : " & CC + 1 & vbNewLine & "و الصف : " & CR + 1)
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       DataGridView1.Item(CC, CR).Value = CV
       DataGridView1.Item(CC, CR).Style.BackColor = Color.Brown
       MsgBox("تم الاسقاط على العمود : " & CC + 1 & vbNewLine & " والصف : " & CR + 1)
   End Sub
   Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
       Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
       CR = hit.RowIndex : If CR < 0 Then Exit Sub
       CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
       CV = DataGridView1.Item(CC, CR).Value : If CV Is Nothing Then Exit Sub
       DataGridView1.DoDragDrop(CV, DragDropEffects.Move)
   End Sub
الرد }}}
تم الشكر بواسطة: asemshahen5 , muad , عبد العزيز البسكري
#8
الله يعطيك الصحة والعافية
الرد }}}
تم الشكر بواسطة: 3booody



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم