Проект WinForms, в нем форма с dataGridView, на котором висит событие MouseMove. Форма развернута на весь экран. Так же есть работающий таймер.
Тут я определяю координаты ячейки, над которой находится курсор мыши:
private Point A1;
int cellX;
int cellY;
private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
cellX = e.X / dataGridView1.Columns[0].Width;
cellY = e.Y / dataGridView1.RowTemplate.Height;
this.Text = "cellX: " + cellX + " cellY: " + cellY;
}
Нагрузка на процессор минимальна.
Но кроме определения ячейки мне нужно, чтобы курсор мог двигаться только посточно. Пробую добавить в мой метод такой код:
A1.X = dataGridView1.Left + e.X;
A1.Y = 200 + dataGridView1.RowTemplate.Height/2;
Cursor.Position = A1; //как я понял, тормоза из-за этой строчки.
При этом я добился чего хотел и курсор движется по одной из строк, но при наведении на dataGridView нагрузка на одно из ядер в диспетчере задач растет до 100%, а таймер останавливается до тех пор, пока курсор не покинет пределы таблицы.
Есть ли какие-то менее затратные способы решить задачу или можно как-то оптимизировать мой способ?