【问题标题】:How do I change the cursor for a ToolStripButton?如何更改 ToolStripButton 的光标?
【发布时间】:2009-02-09 15:00:19
【问题描述】:

当用户将鼠标悬停在特定 ToolStripButton 上时,我想更改用户的光标,而不是 ToolStrip 上的其他项目。如何设置按钮的光标?

【问题讨论】:

    标签: c# .net winforms toolstripbutton


    【解决方案1】:

    因为 ToolStripItem 没有从 Control 继承,所以它没有 Cursor 属性。

    您可以在 MouseEnter 事件上设置表单光标,并在 MouseLeave 事件上恢复表单光标,VB 示例如下:

    Dim savedCursor As Windows.Forms.Cursor
    
    Private Sub ToolStripButton1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles ToolStripButton1.MouseEnter
        If savedCursor Is Nothing Then
            savedCursor = Me.Cursor
            Me.Cursor = Cursors.UpArrow
        End If
    End Sub
    
    Private Sub ToolStripButton1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ToolStripButton1.MouseLeave
        Me.Cursor = savedCursor
        savedCursor = Nothing
    End Sub
    

    更新

    这是 C# 中的相同答案:

    private Cursor savedCursor;
    
    private void ToolStripButton1_MouseEnter(object sender, EventArgs e) {
        if (savedCursor == null) {
            savedCursor = this.Cursor;
            this.Cursor = Cursors.UpArrow;
        }
    }
    
    private void ToolStripButton1_MouseLeave(object sender, EventArgs e) {
        this.Cursor = savedCursor;
        savedCursor = null;
    }
    

    【讨论】:

    • 问题是关于 C# 的。为什么在 VB 中会这样?
    • @StealthRabbi 使用 C# 示例更新
    【解决方案2】:

    下拉到 Win32 并处理 WM_SETCURSOR。您可以输入自己的自定义逻辑,以根据按钮的命中测试更改光标。 Check this article by Raymond Chen 以便更好地了解光标的设置方式。

    【讨论】:

      【解决方案3】:

      您必须设置 Toolstrip.Cursor 属性才能更改光标。是的,你是对的,它会改变所有工具条按钮的鼠标光标。

      为了解决这个问题,为工具条上的每个按钮创建一个 OnMouseEnter 事件,然后将整个工具条的光标设置为该特定按钮所需的光标。

      【讨论】:

      • 您还可以在按钮的 OnMouseLeave 事件上将光标润湿。
      【解决方案4】:

      这是最好的方法:

          Private Sub tsbtnGuardar_MouseEnter(sender As Object, e As EventArgs) Handles tsbtnGuardar.MouseEnter
            On Error Resume Next
            ts.Cursor = Cursors.Hand
          End Sub
      
      Private Sub tsbtnGuardar_MouseLeave(sender As Object, e As EventArgs) Handles tsbtnGuardar.MouseLeave
          On Error Resume Next
          ts.Cursor = Cursors.Arrow
      End Sub
      

      其中 'ts' 是工具条栏,而 tsbtnGuardar 是工具条按钮。它对我很有用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 2012-05-03
        相关资源
        最近更新 更多