首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将鼠标悬停在datagridview中的只读列上时,将光标更改为“i”

将鼠标悬停在datagridview中的只读列上时,将光标更改为“i”
EN

Stack Overflow用户
提问于 2013-06-06 22:42:18
回答 2查看 2.2K关注 0票数 0

我使用的是Visual basic2012,我正在使用由excel 2010宏工作簿填充的datagridview。我的datagridview中的一些列是只读列,我希望当光标移动到这两列之一时,光标从默认光标变为I型光标。当我的代码处于当前状态时,如果该列是只读的,则在mouse_enter事件和mouse_leave事件中都有一条if-then语句。当我实现这段代码时,我很难理解为什么光标不会改变。如果有人对如何改进我的代码有任何建议,我将不胜感激。

代码语言:javascript
复制
Private Sub DataGridView1_MouseHover(sender As Object, e As EventArgs) Handles DataGridView1.MouseHover
    If DataGridView1.CurrentCell.ReadOnly = True Then
        Cursor.Current = Cursors.IBeam
    Else
        Cursor.Current = Cursors.Default
    End If
End Sub

Private Sub DataGridView1_MouseLeave(sender As Object, e As EventArgs) Handles DataGridView1.MouseLeave
    Cursor.Current = Cursors.Default
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 08:46:09

在CellMouseMove事件中尝试它..

代码语言:javascript
复制
Private Sub DataGridView1_CellMouseMove(sender As Object, e As EventArgs) Handles DataGridView1.CellMouseMove

    Dim x as Integer = e.ColumnIndex

    If DataGridView1.Columns(x).ReadOnly Then
        Cursor.Current = Cursors.IBeam
    Else
        Cursor.Current = Cursors.Default
    End If
End Sub
票数 1
EN

Stack Overflow用户

发布于 2013-06-07 00:38:19

Kratz是正确的,因为您需要使用鼠标所在的单元格,而不是DataGridViewCurrentCell属性,后者不一定是鼠标所在的位置。这将使这件事变得更加棘手。

因此,基本上这意味着您需要计算要将光标更改为IBeam的每一列的下限和上限。假设您有一个包含3列的datagridview,并且希望对第二列使用IBeam。下限是第一列的宽度,上限是第一列的宽度加上第二列的宽度。

因此,您的代码将如下所示:

代码语言:javascript
复制
Private Sub DataGridView1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseMove
    If Not e.Location.IsEmpty Then
        Dim lowerBounds As Integer = DataGridView1.Columns("FirstColumnsName").Width
        Dim UpperBounds As Integer = DataGridView1.Columns("FirstColumnsName").Width + DataGridView1.Columns("SecondColumnsName").Width

        If e.X >= lowerBounds AndAlso e.X < UpperBounds Then
            Cursor.Current = Cursors.IBeam
        Else
            Cursor.Current = Cursors.Default
        End If
    End If
End Sub

如果要切换多个列,则需要计算它们所覆盖的空间,并将它们分别添加到If语句中。您还需要使用鼠标离开事件来重置光标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16965100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档