如何在VB.NET中处理鼠标悬停事件的表单控制框

编程


我使用鼠标悬停和鼠标离开事件在 VB.Net 中编写了 Form1 的代码控制框处理,但它不起作用。 谁能告诉我错误是什么?

我尝试过的:

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

对我来说这段代码运行良好。
我想您的表单上还有几个控件。 如果鼠标悬停在其中之一上,它将离开表单。
如果您希望它们也使您的 Controlbox 可见,您必须将此控件中的每个悬停事件也添加到 Form1_MouseHover-Method 中。
也许您还应该查看 Form1_MouseLeave 是否确实检测到 Leave-Event。
我建议您创建一种“知道”鼠标位于表单或其控件之一上方的方法……

这是一个简单的代码示例,它与属于 Form 的 Timer 一起使用:

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。 有了这个你还必须计算…

コメント

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