如何为vb.net
中的按钮设置鼠标移动的无光标?
我试着谷歌但是,我没有找到任何例子。那么我尝试做的是将鼠标移到按钮上将鼠标光标更改为cursor.no或其他类似cursor.default
好吧,尝试了多种不同的方式,我尝试了如下所示的示例,但我的按钮默认禁用应用程序加载
所以下面的示例与禁用按钮
Private Sub Button21_MouseEnter(sender As Object, e As EventArgs) Handles Button21.MouseEnter
If TextBox6.Text = Nothing Then
Me.Cursor = Cursors.No
End If
If TextBox6.Text <> "1a3390pohv-1974-pod-2017" Then
Me.Cursor = Cursors.No
End If
If TextBox6.Text = "1a3390pohv-1974-pod-2017" Then
Me.Cursor = Cursors.Hand
End If
End Sub
答案 0 :(得分:2)
您可以向Form的MouseMove事件添加处理程序。由于它不在Button的处理程序中,而是让Button处理程序自动找出输入/输出逻辑(MouseEnter事件),您需要自己检查这个逻辑。
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
Dim buttons = Me.Controls.OfType(Of Button)()
Dim insideButton = True
If sender Is Me AndAlso buttons.Count > 0 Then
insideButton = False
For Each button In buttons
If e.X > button.Left _
AndAlso e.X < button.Left + button.Width _
AndAlso e.Y > button.Top _
AndAlso e.Y < button.Top + button.Height Then
insideButton = True
Exit For
End If
Next
End If
If insideButton Then
Me.Cursor = getCursorState()
Else
' not sure what the cursor should be when not on a button. set it here
Me.Cursor = Cursors.Default
End If
End Sub
' the logic has been simplified
Private Function getCursorState() As Cursor
If TextBox6.Text = "1a3390pohv-1974-pod-2017" Then
Return Cursors.Hand
Else
Return Cursors.No
End If
End Function
我们将使用相同的处理程序进行鼠标移动,以重用代码。处理程序中有一些额外的逻辑来容纳表单和按钮。在启动时将处理程序添加到每个Button。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each button In Me.Controls.OfType(Of Button)()
AddHandler button.MouseMove, AddressOf Form1_MouseMove
Next
End Sub
现在,当禁用Button时,将使用Form的鼠标移动处理程序。启用Button后,将使用自己的鼠标移动处理程序。
答案 1 :(得分:-2)
如果要在Button
内隐藏鼠标光标,可以使用按钮的MouseEnter
和MouseLeave
事件,并使用{{ 3}}和Cursor.Show
方法:
Private Sub Button1_MouseEnter(sender As Object, e As EventArgs) Handles Button1.MouseEnter
Cursor.Hide()
End Sub
Private Sub Button1_MouseLeave(sender As Object, e As EventArgs) Handles Button1.MouseLeave
Cursor.Show()
End Sub
在上次编辑之后,您的问题似乎是按钮被禁用,并且禁用的控件不会抛出事件。一个简单的解决方案可能如下:
Panel
,并将按钮放入其中(使用Dock.Fill
)不使用按钮MouseEnter
和MouseLeave
,而是使用与容器面板相同的事件:
Private Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
If TextBox6.Text = Nothing Then
Me.Cursor = Cursors.No
End If
If TextBox6.Text <> "1a3390pohv-1974-pod-2017" Then
Me.Cursor = Cursors.No
End If
If TextBox6.Text = "1a3390pohv-1974-pod-2017" Then
Me.Cursor = Cursors.Hand
End If
End Sub
在Panel1.MouseLeave
中也是如此答案 2 :(得分:-2)
如果您需要的是当鼠标悬停在该按钮上时要更改光标,您只需使用即可
加载表单或设计器时myBtn.Cursor = Cursor.No
。