Как я могу заставить панель прокручивать программно для представления ее поля изображения AutoSized

ctrl+alt+del для открытия диспетчера задач
alt+f4 для закрытия окна

, я удалил ключ "Windows" из своей клавиатуры наряду с несколькими другими нестандартными ключами - они - слишком много неприятности.

7
задан gevorg 13 June 2016 в 18:53
поделиться

2 ответа

Я считаю, что ваш инстинкт прав, но ваша ошибка заключается в попытке настроить полосы прокрутки, а не перемещать PictureBox на прокручиваемой панели. Я был бы склонен записывать начальные местоположения мыши и PictureBox в начале перетаскивания и обновлять их относительно этой начальной позиции в каждом событии MouseMove, а не вносить инкрементные изменения, как в приведенном выше коде (и ваш исходный код это делает). Причина этого в том, что если по какой-либо причине будут обнаружены какие-либо неожиданные значения, это вызовет лишь временный эффект - следующее хорошее событие самокорректируется.)

Я был бы склонен записывать начальные местоположения мыши и PictureBox в начале перетаскивания и обновлять их относительно этой начальной позиции в каждом событии MouseMove, а не вносить инкрементные изменения, как в приведенном выше коде (и ваш исходный код это делает). Причина этого в том, что если по какой-либо причине будут обнаружены какие-либо неожиданные значения, это вызовет лишь временный эффект - следующее хорошее событие самокорректируется.)

4
ответ дан 6 December 2019 в 21:14
поделиться

It is jumping because the act of scrolling the panel will throw off the mouse position by the scroll amount. You can get the "real" mouse position (relative from the upper left corner of the panel) like this:

  Point realPos = new Point(e.X + panel1.AutoScrollPosition.X,
    e.Y + panel1.AutoScrollPosition.Y);

assuming the picture box' Location property is (0, 0). The best way to scroll the panel is to set its AutoScrollPosition property.

5
ответ дан 6 December 2019 в 21:14
поделиться
Другие вопросы по тегам:

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