У меня есть окно изображения, установленное на Авторазмер, так что изображение заставляет его расти до полного размера изображения.
Поле рисунка находится на панели с autoScroll = true, поэтому полосы прокрутки появляются, когда изображение больше, чем панель.
Как программно прокрутить панель, когда пользователь нажимает на перетаскивание изображения, тем самым изменяя положение изображения.
Я пытался использовать событие MouseMove, захватывая последние X и Y позиции мыши, вычисляя, сколько мышь переместила, и корректировал значения вертикальной и горизонтальной прокрутки панели.
Это действительно перемещает изображение, но оно скачет повсюду и непредсказуемо прокручивается.
Как мне этого добиться?
Вот что у меня есть в событиях с мышью ...
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (dragging)
{
if (e.Button == MouseButtons.Left)
{
// move the image inverse to direction dragged
int horizontalChange = (e.X - startingX) * -1;
int newHorizontalPos = panel1.HorizontalScroll.Value + horizontalChange;
if (newHorizontalPos < panel1.HorizontalScroll.Minimum)
{
newHorizontalPos = panel1.HorizontalScroll.Minimum;
horizontalChange = 0;
}
if (newHorizontalPos > panel1.HorizontalScroll.Maximum)
{
newHorizontalPos = panel1.HorizontalScroll.Maximum;
horizontalChange = 0;
}
panel1.HorizontalScroll.Value = newHorizontalPos;
int verticalChange = (e.Y - startingY);
// move the image inverse to direction dragged
int newverticalPos = panel1.VerticalScroll.Value + verticalChange * -1;
if (newverticalPos < panel1.VerticalScroll.Minimum)
{
newverticalPos = panel1.VerticalScroll.Minimum;
verticalChange = 0;
}
if (newverticalPos > panel1.VerticalScroll.Maximum)
{
newverticalPos = panel1.VerticalScroll.Maximum;
verticalChange = 0;
}
panel1.VerticalScroll.Value = newverticalPos;
}
}
startingX = e.X;
startingY = e.Y;
}
Моя логика неверна или мое понимание функции прокрутки панели неверно?