[ad_1]
لقد كتبت التعامل مع مربع التحكم في التعليمات البرمجية لـ 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 قد اكتشف بالفعل حدث الإجازة.
أقترح عليك إنشاء طريقة “تعرف” أن الماوس موجود فوق النموذج أو أحد عناصر التحكم الخاصة به …
فيما يلي عينة تعليمات برمجية سهلة الصنع تعمل مع مؤقت ينتمي إلى النموذج:
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 المحدد. مع هذا عليك أن تحسب أيضا …
وواحدة أخرى :
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
[ad_2]
コメント