Задать вопрос
@ZmeuSnake

Как снизить нагрузку на систему при работе с Cursor в MouseMove на dataGridView?

Проект 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%, а таймер останавливается до тех пор, пока курсор не покинет пределы таблицы.

Есть ли какие-то менее затратные способы решить задачу или можно как-то оптимизировать мой способ?
  • Вопрос задан
  • 306 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
@ZmeuSnake Автор вопроса
Проблема частично решилась помещением проблемной строки в if:
if (kk == 3)
{
Cursor.Position = A1;
kk = 0;
}
kk++;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Не используй А1 и пиши сразу в Position. C# не знаю, но лишний временный объект скорости точно не добавляет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы