マウスホイールイベント使用時、カーソル移動よりも内部のスクロールが優先される仕様のため、それを抑制しようと考えました。
列を3つ追加済みのものとします。
```
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.MouseWheel += new MouseEventHandler(dataGridView1_MouseWheel);
} private void dataGridView1_MouseWheel(object sender, MouseEventArgs e) { try { dataGridView1.MultiSelect = false; int wheel = e.Delta / 120;
//マウスホイール時の上下
int CurrentRow = dataGridView1.CurrentCell.RowIndex - wheel; int CurrentCell = dataGridView1.CurrentCell.ColumnIndex;
//マウスホイール時に選択行を1ずつ変更
dataGridView1.Rows[CurrentRow].Cells[CurrentCell].Selected = true;
//現在の選択行が10以上のとき固定を解除 if (10 < CurrentRow) { dataGridView1.Rows[10].Frozen = false; dataGridView1.FirstDisplayedScrollingColumnIndex = 10; //10行目から表示 } } catch (Exception ex) { // MessageBox.Show(ex.Message, dataGridView1.RowCount.ToString()); Console.WriteLine(ex); } } private void Form1_Load(object sender, EventArgs e) { int CountVal = 0; for (int i=0; i < 30; i++) { dataGridView1.Rows.Add(); for (int C = 0; C < 3; C++) { dataGridView1.Rows[i].Cells[C].Value = CountVal; CountVal++; } } dataGridView1.Rows[10].Frozen = true; } }
}
実行結果  通常であれば、このようにして固定が解除された状態では、スクロールも初期状態に戻るはずですが、固定された状態のままです。どのようにすれば解除できるのか教えてください。 ** 試したこと** [マウスホイール動作を無効化したい](https://teratail.com/questions/72857) を参考にしましたが、スクロール動作は無効化出来たものの、既存のマウスホイールイベントが上書きされたために、マウスホイール時のカーソル移動が無効化されました。 更に試したこと ```ここに言語を入力 protected override void OnMouseWheel(MouseEventArgs e) { HandledMouseEventArgs wEventArgs = e as HandledMouseEventArgs; wEventArgs.Handled = true; int Wheel = e.Delta / 120; CurrentCell = CurrentRow.Cells[Wheel]; }
try Catchで囲んでも、僅かにカーソルが動いただけで配列の境界外errorになります。
回答3件
あなたの回答
tips
プレビュー