Bagaimana menangani kotak kontrol formulir untuk acara mouse hover di VB.NET

pemrograman


Saya menulis penanganan kotak kontrol kode untuk Form1 di VB.Net menggunakan acara mouse hover dan cuti mouse, tetapi tidak berfungsi. Adakah yang bisa memberi tahu apa kesalahannya?

Apa yang saya coba:

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

Solusi 1

Bagi saya kode ini berfungsi dengan baik.
Saya kira Anda juga memiliki beberapa Kontrol pada Formulir Anda. Jika Mouse mengarahkan kursor ke salah satunya, ia akan meninggalkan Formulir.
Jika Anda ingin mereka juga membuat Kotak Kontrol Anda terlihat, Anda harus menambahkan setiap Acara Hover dari Kontrol ini juga ke Metode Form1_MouseHover.
Mungkin Anda juga harus melihat apakah Form1_MouseLeave benar-benar mendeteksi Acara Keluar.
Saya menyarankan Anda membuat metode yang “mengetahui” bahwa Mouse berada di atas Formulir atau salah satu kontrolnya …

Berikut adalah contoh kode yang mudah dibuat yang bekerja dengan Timer milik Form :

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

Saya memberi Timer Interval kecil (100 ms) – satu-satunya hal yang harus Anda ketahui adalah bahwa Form-Header dan Borders tidak termasuk dalam Definisi Ukuran dari Formulir. Ukurannya tergantung pada FormBorderStyle yang dipilih. Dengan ini Anda harus menghitung juga …

dan satu lagi:

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をコピーしました