質問: Visual Basic2005で開発中です。 プログラムを実行し、DataGridView上でマウスのユニバーサルスクロール機能(オートスクロール機能)が使えるようにしたいのですが、どこで設定をすればいいのでしょうか? マウスはエクセル上では、ユニバーサルスクロール機能が使える状態です。 初めての Visual Basic2005での開発で、わからないことばかりです。 お願いします。
回答: お世話になります。 勉強不足でオートスクロール機能というのが どういうものを指すのかわからないのですが、 マウスの動きに追随してセルやスクロールする、という意味であっていれば以下の実装で出来ました。 結構めんどくさかったし、ソースももうちょっときれいに書き直せると思います。 Private Sub DataGridView1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseMove Dim hInfo As DataGridView.HitTestInfo = _ Me.DataGridView1.HitTest(e.X, e.Y) Debug.WriteLine("hInfo:" & hInfo.ToString()) Dim nextRowIndex As Integer = 0 Dim nextColumnIndex As Integer = 0 If hInfo.Type = DataGridViewHitTestType.Cell Then nextRowIndex = hInfo.RowIndex nextColumnIndex = hInfo.ColumnIndex ElseIf hInfo.Type = DataGridViewHitTestType.ColumnHeader OrElse _ hInfo.Type = DataGridViewHitTestType.VerticalScrollBar Then If hInfo.RowIndex > Me.DataGridView1.CurrentCell.RowIndex Then nextRowIndex = Me.DataGridView1.CurrentCell.RowIndex + 1 ElseIf Me.DataGridView1.CurrentCell.RowIndex >= 0 Then nextRowIndex = Me.DataGridView1.CurrentCell.RowIndex - 1 End If nextColumnIndex = hInfo.ColumnIndex ElseIf hInfo.Type = DataGridViewHitTestType.RowHeader OrElse _ hInfo.Type = DataGridViewHitTestType.HorizontalScrollBar Then If hInfo.ColumnIndex > Me.DataGridView1.CurrentCell.ColumnIndex Then nextColumnIndex = Me.DataGridView1.CurrentCell.ColumnIndex + 1 ElseIf Me.DataGridView1.CurrentCell.ColumnIndex >= 0 Then nextColumnIndex = Me.DataGridView1.CurrentCell.ColumnIndex - 1 End If nextRowIndex = hInfo.RowIndex Else Exit Sub End If If nextRowIndex < 0 Then nextRowIndex = 0 If nextRowIndex > Me.DataGridView1.RowCount - 1 Then nextRowIndex = Me.DataGridView1.RowCount - 1 If nextColumnIndex < 0 Then nextColumnIndex = 0 If nextColumnIndex > Me.DataGridView1.ColumnCount - 1 Then nextColumnIndex = Me.DataGridView1.ColumnCount - 1 Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(nextRowIndex).Cells(nextColumnIndex) Me.DataGridView1.FirstDisplayedCell = Me.DataGridView1.CurrentCell End Sub