Почему Cursor.Position имеет неправильное значение при отладке? - PullRequest
0 голосов
/ 15 января 2019

В сеансе отладки Cursor.Position = {X = 1867 Y = 538} и Screen.FromPoint(Cursor.Position) возвращает объект Screen, имеющий границы {X = 0 Y = 0 Width = 1366 Height = 768}.

Если я деактивирую первый экран, объект Screen имеет границы {X = 0 Y = 0 Width = 1680 Height = 1050} (разрешение второго экрана больше, чем у первого экрана).

Итак, я вижу, что прямоугольник Screen.Bounds не говорит мне прямоугольник, который является экраном относительно глобального разрешения, которое включает оба экрана, но говорит мне о размере экрана, с X = Y = 0.

Проблема в том, что позиция курсора {X = 2203 Y = 579} должна быть на втором экране. Я думал о возможностях:

  1. положение курсора блокируется при выполнении операции перетаскивания.
  2. первый экран, имеющий меньшее разрешение, чем второй экран, может создать некоторое виртуальное пространство над первым экраном.

Либо с включенным или отключенным первым / вторым экраном / с, у меня та же проблема:

MyListView.PointToClient(Cursor.Position)

возвращает точку с отрицательным значением {X = 1787 Y = -79}, Y, не удается найти ListViewItem под курсором мыши.

MyListView.Bounds = {X = 3 Y = 38 Width = 406 Height = 219}.

Я переместил окно программы, закрепленное в левом верхнем углу первого экрана, и произошло то же самое, Cursor.Position - {X = 2231 Y = 571}.

1 Ответ

0 голосов
/ 15 января 2019

Теперь я вижу, что при отладке обновляется Cursor.Position (он не заблокирован, пока выполнение заблокировано в точке останова).

Наконец, проблема заключалась в том, что я проверил переменную, чтобы она не была равна -1, а не была равна -1.

...