الجمعة، 16 يونيو 2017

تحريك الادوات بالماوس على الفورم vb.net



Form - Button - PictureBox - Label و هى الأدوات التى سنقوم بتحريكها ان شاء الله , قم الان بفتح شاشة الكود الخاصة بالـ Form1 .......... فى منطقة الـ Public Class Form1 أكتب الكود الاتى :

' These will be our switches
Dim Go As Boolean
Dim LeftSet As Boolean
Dim TopSet As Boolean
'These will hold the mouse position
Dim HoldLeft As Integer
Dim HoldTop As Integer
' These will hold the offset of the mouse in the element
Dim OffLeft As Integer
Dim OffTop As Integer

و الكود عباره عن تعريف لبعض المتغيرات التى سنحتاجها و هى تنقسم الى 3 أقسام :

1) التحويلات
(GO) وظيفته يقوم باخبار المشروع ما اذا كان الماوس تم الضغط عليه و جارى التحريك أم لا .
(LeftSet) و (TopSet) وظيفتهما هى معرفة ما اذا تم التعرف على نقطة بداية التحريك أم لا .
الأن نريد ضبط التحويلات بمعنى أننا سنقوم بجعل القيمه العادية لها OFF أى فى حالة MouseUp أى اننا اذا لم نكن فى وضع الضغط على الأداه , اذا نحن لا نحركها الأن .
فى نفس المنطقه قم بكتاية الكود الأتى :

Private Sub Obj_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Obj.MouseUp
                         Go = False
                          LeftSet = False
                         TopSet = False
End Sub

و متى يعرف البرنامج اننا سنقوم بتحريك الماوس ؟ عندما يكون MousePress او بمعنى عندما نقوم بعمل Click و بالتالى سنقوم باعلام البرنامج بعكس ما فى الاجراء السابق و لكن للمتغير GO فقط لأن هذه هى وظيفته .
فى نفس المنطقه قم كتابة الكود الأتى :
Private Sub Obj_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Obj.MouseDown
                        Go = True
End Sub

الان البرنامج يعرف متى يكون الماوس فى حالة Click أم لا و نريد أن تتبع حركة الماوس أثناء الـ Click الاداه المراد تحريكها ..... ستشرح بالتفصيل لاحقا !
- نريد الان معرفة ما اذا كان الماوس يتحرك و هو و فى الوضع Click أم لا .
- نريد معرفة أين يوجد الماوس الأن .
- نريد معرفة الاحداثيات التى بدأ عندها الماوس عند الضغط عليه أول مره
- نحرك الاداه الى الاحدائيات الواقف عليها الماوس الأن
فى نفس المنطقة قم بكتابة الكود الاتى :

Private Sub Obj_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Obj.MouseDown
         Go = True
        If  Go = True Then
                        ' Set the mouse position
              HoldLeft = (Control.MousePosition.X - Me.Left)
             HoldTop = (Control.MousePosition.Y - Me.Top)
            ' Find where the mouse was clicked ONE TIME
             If TopSet = False Then
            OffTop = HoldTop - sender.Top
             ' Once the position is held,flip the switch ' so that it                         doesn't keep trying to find the position
              TopSet = True
      End If
     If LeftSet = False Then
              OffLeft = HoldLeft - sender.Left
            ' Once the position is held,flip the switch ' so that it                          doesn't keep trying to find the position
                LeftSet = True
      End If
              ' Set the position of the object
               sender.Left = HoldLeft - OffLeft
                sender.Top = HoldTop - OffTop

     End If
End Sub

لاحظ استخدام المتغير Sender و ذلك لأن الاداه التى تضغط عليها فقط هى التى تتحرك .
Sender هو : متغير نظام يعود باسم العنصر الذى يعود بقيمه معينه , يمكنك استخدام الكود مره واحده فقط لتحريك أى عدد من الادوات .
و لكى تضيف أداه اخرى لتحريكها فقط أضف الحدث ObjName.Event لكل المعاملات الثلاثه :
ObjName.MouseDown
ObjName.MouseUp
ObjName.MouseMove


ليست هناك تعليقات:

اضافة تعليق

جميع الحقوق محفوظة © 2019 الحقيبة البرمجية لمبرمجى VB.NET