0

私は Visual Basic 2012 を使用しておりdatagridview、Excel 2010 マクロ ブックを使用して作業しています。my 内の列の一部datagridviewは読み取り専用列であり、カーソルが 2 つの列のいずれかに移動したときに、カーソルをデフォルト カーソルから I ビームに変更したいと考えています。私のコードは現在座っているので、列が読み取り専用の場合は、イベントとイベントif-thenにステートメントがあります。このコードを実装してもカーソルが変わらない理由がわかりません。私のコードを改善する方法について何か提案があれば、私は大いに感謝します。mouse_entermouse_leave

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
4

2 に答える 2

1

CellMouseMove Event で試してみてください..

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
于 2013-06-07T00:46:08.877 に答える
0

CurrentCellKratz は、必ずしもマウスがあるとは限らない の属性ではなく、マウスが置かれているセルを使用する必要があるという点で正しいDataGridViewです。これにより、これがさらに難しくなります。

したがって、基本的にこれは、カーソルを IBeam に変更する各列の下限と上限を計算する必要があることを意味します。たとえば、3 列の datagridview があり、2 列目に IBeam を使用するとします。下限は最初の列の幅になり、上限は最初の列の幅に 2 番目の列の幅を加えたものになります。

したがって、コードは次のようになります。

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 ステートメントに個別に追加する必要があります。カーソルをリセットするには、マウスを離すイベントも必要です。

于 2013-06-06T16:38:18.993 に答える