我有一个设置为 AutoSize 的图片框,以便图像强制它增长到图像的全尺寸。
图片框在一个带有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;
}
是我的逻辑错误还是我对面板滚动功能的理解错误?