الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يحرك المستخدم النموذج من اي مكان فيه عوضا ً عن

مغلق
بدأه حــ@ـــد في 25 مارس 2005 · 4 رد · 697 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

يا أخواني بعض الأحيان نستغني عن شريط العناوين للنموذج

فيستحيل على المستخدم تحريك النموذج قطعا ً

فهل من طريقه تجعل المستخدم بمجرد الضغط والتحريك في اي مكان من النموذج يتحرك معه وكأنه ضاغط على شريط العنوان ؟

اسعفونا بهذه جزاكم الله خيرا ً

#2

تكفون يا أخوان لو فقط طريقة مبدئيه مو مشكله يعني لازم كود او ممكن بالديزاين تكون ؟

انتظر افاداتكم بفارغ الصبر

#3

السلام عليكم

هذه الطريقة الأولى عن طريق الـ API فقط ضع هذا الكود في النموذج الذي تود تطبيق عليه تقنية الـ Dragable

#Region " Draging Form "
    ' API constants for subclassing
    Private Const WM_NCHITTEST As Integer = &H84
    Private Const HTCAPTION As Integer = 2
    Private Const HTCLIENT As Integer = 1

    ' we subclass the form so that the user can move it
    ' by clicking anywhere on its surface

    Protected Overrides Sub WndProc(ByRef m As Message)
        ' let the base form process this message
        MyBase.WndProc(m)

        Select Case m.Msg
            Case WM_NCHITTEST
                ' if on client area, make Windows believe it's on caption
                If m.Result.ToInt32 = HTCLIENT Then
                    ' the only way to assing an IntPtr
                    m.Result = New IntPtr(HTCAPTION)
                End If
        End Select
    End Sub
#End Region

و الطريقة الثانية بأستخدام بعض الـ Events للنموذج Form

#Region " Mouse Down & Up & Move -- For Movable Form "

    Private Sub Main_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = MouseButtons.Left Then ' Mouse Down
            'Gets Mouse Position before move:
            x = MousePosition.X - DesktopLocation.X
            y = MousePosition.Y - DesktopLocation.Y
            MsDown = True
        End If
    End Sub

    Private Sub Main_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If MsDown Then
            'Set position of the form: Mouse Move
            SetBounds(MousePosition.X - x, MousePosition.Y - y, Width, Height)
        End If
    End Sub

    Private Sub Main_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        MsDown = False ' Mouse Up
    End Sub

#End Region

الطريقة الثانية أفضل إذا كنت تريد أن يكون النموذج بدون حدود , فبالطبع لا حدود يعني لا تكبير Maximize

فلن يتم تكبير النموذج أم الأول فسيتم تكبير النموذج شاهد المثالين و إختبرهما جيداً قبل إتخاذ القرار

ستلاحظ عند الضغط المزدوج Double Click على النموذج الأول Exmple1 يتم تكبيره Maximize

بينما الثاني Example2 لا يتم تكبيره .

وفقك الله ........ السلام عليكم

DragableForms.zip

في المثال يتضح المقال

#4

جزاك الله خير اخوي وشكرا ً لك

الطريقه الأولى تمام 100 % ولكن الثانيه طلع يل خطأ في MsDown هل احولها الى Mouse Down

اطيب تحيه لك

#5

السلام عليكم

لا شكر على واجب أخي

لا تغير الـ MsDown هذا متغير منطقي يعني يا نعم يا لا وهو بلا شك من نوع Boolean

تم تعريفه في أول النموذج بعد

Windows Form Designer generated code

وكان بهذا الشكل قد كتب

  Dim MsDown As Boolean  'Mouse down

هذا المتغير نعول عليه حينما نريد تحريك النموذج لانه كلما ضغ المستخدم على النموذج تتحول قيمة هذا المتغير إلى True

وعندما يرفع المستخدم الضغط عن النموذج ( بالفأرة) تتحول قيمة هذا المتغير إلى False هذه التقنية تعرف بـ Flag

هل المثال الذي أرفقت يشتغل فيه النموذج الثاني أم لا إن كان الجواب بنعم

فقط تمعن في النموذج الثاني بتروي و إن شاء الله ترى كل شيء واضح وسهل

والله الموفق السلام عليكم

في المثال يتضح المقال

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…