如何设置按钮上鼠标移动的无光标?

时间:2017-07-31 13:45:22

标签: vb.net

如何为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

3 个答案:

答案 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内隐藏鼠标光标,可以使用按钮的MouseEnterMouseLeave事件,并使用{{ 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

在上次编辑之后,您的问题似乎是按钮被禁用,并且禁用的控件不会抛出事件。一个简单的解决方案可能如下:

  1. 在表单中添加Panel,并将按钮放入其中(使用Dock.Fill
  2. 不使用按钮MouseEnterMouseLeave,而是使用与容器面板相同的事件:

    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
    
  3. 在Panel1.MouseLeave

    中也是如此

答案 2 :(得分:-2)

如果您需要的是当鼠标悬停在该按钮上时要更改光标,您只需使用即可  加载表单或设计器时myBtn.Cursor = Cursor.No