كيفية التعامل مع مربع التحكم في النماذج لأحداث تمرير الماوس في VB.NET


لقد كتبت التعامل مع مربع التحكم في التعليمات البرمجية لـ Form1 في VB.Net باستخدام أحداث تمرير الماوس ومغادرة الماوس، لكنه لا يعمل. يمكن لأحد أن يقول ما هو الخطأ؟

ما حاولت:

Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
        Me.ControlBox = False
    End Sub

    Private Sub Form1_MouseHover(sender As Object, e As EventArgs) Handles MyBase.MouseHover
        Me.ControlBox = True
    End Sub

الحل 1

بالنسبة لي هذا الرمز يعمل بشكل جيد.
أفترض أن لديك أيضًا العديد من عناصر التحكم في النموذج الخاص بك. إذا مرر الماوس فوق أحد هذه العناصر فإنه يترك النموذج.
إذا كنت تريد أن تجعل صندوق التحكم الخاص بك مرئيًا أيضًا، فيجب عليك إضافة كل حدث تحويم من عناصر التحكم هذه أيضًا إلى طريقة Form1_MouseHover.
ربما يجب عليك أيضًا معرفة ما إذا كان Form1_MouseLeave قد اكتشف بالفعل حدث الإجازة.
أقترح عليك إنشاء طريقة “تعرف” أن الماوس موجود فوق النموذج أو أحد عناصر التحكم الخاصة به …

فيما يلي عينة تعليمات برمجية سهلة الصنع تعمل مع مؤقت ينتمي إلى النموذج:

VB
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
     Dim p As Point = PointToClient(MousePosition)
      If (p.X >= 0) And (p.X < Width) And (p.Y >= 0) And (p.Y < Height) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
 End Sub

لقد أعطيت المؤقت فاصلًا زمنيًا صغيرًا (100 مللي ثانية) – الشيء الوحيد الذي يجب أن تعرفه هو أن رأس النموذج والحدود لا تنتمي إلى تعريف الحجم من النموذج. يعتمد حجمها على FormBorderStyle المحدد. مع هذا عليك أن تحسب أيضا …

وواحدة أخرى :

VB
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim p As Point = MousePosition
    Dim r As Rectangle = Me.ClientRectangle
    r.X += Location.X
    r.Y += Location.Y
    If (p.X >= r.Left) And (p.X <= r.Right) And (p.Y >= r.Top) And (p.Y <= r.Bottom) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
End Sub

コメント

タイトルとURLをコピーしました