平移图片框中的图像不起作用
问题描述:
我已经在c#中开发了Windows应用程序,其中我有一个panelBox内的pictureBox。我已经应用了放大和缩小功能。现在我想让pictureBox中的图像平移。我在pictureBox上应用了mouseDown,mouseMove和mouseUp事件。它的代码是:平移图片框中的图像不起作用
private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
{
if (pflag == 1)
{
dragging = true;
start = e.Location;
}
}
private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
{
// panning code
if (pflag == 1)
{
if (dragging && zoom == 1)
{
pictureBox2.Location = new Point(pictureBox2.Left + (e.Location.X - start.X), pictureBox2.Top + (e.Location.Y - start.Y));
}
}
}
private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
{
if (pflag == 1)
{
dragging = false;
}
}
这里图像是平移但没有边界控制。有时即使图像在平移时也会在面板区域下方。我需要的是,图像应根据缩放因子移动顶部,左侧,右侧,底部,即滚动条的工作方式,而不是超出此范围。
答
您不需要担心缩放,因为鼠标坐标会很好。所示像素的距离应与光标正在移动的距离相同。
您也并不真的需要dragging
变量,除非您将其用于别的东西。
然而,你需要在MouseMove
检查鼠标按钮:
if (pflag == 1 && e.Button == System.Windows.Forms.MouseButtons.Left )
待办事项几件事情:
用户预计了现场,他拖住宿与鼠标光标就像像素他触摸 sh应该总是随着指尖移动。不要通过缩放缩放系数来让他感到惊讶!
如果你想这样做,你将需要使用一个因素,不加入数量。
是,滚动条会因素,在变焦也是电梯仍然将留用鼠标!
这里是一个如何设置限制以防止用户走得太远的例子。它有点牵扯,因为它在放大或缩小时需要工作。不要从非法职位开始,但在缩放时也不要进入这些职位!
// panning code
if (pflag == 1 && e.Button == System.Windows.Forms.MouseButtons.Left )
{
{
Rectangle panRect = new Rectangle(panel1.Location, panel1.ClientSize);
Rectangle picRect = new Rectangle(pictureBox2.Location, pictureBox2.ClientSize);
int newLeft = pictureBox2.Left + (e.Location.X - start.X);
int newTop = pictureBox2.Top + (e.Location.Y - start.Y);
int newRight = newLeft + picRect.Width;
int newBottom = newTop + picRect.Height;
if ((newLeft < 0 && newRight < panRect.Width)
|| (newLeft > 0 /*&& newRight > panRect.Width */)) newLeft = picRect.Left;
if ((newTop < 0 && newBottom < panRect.Width)
|| (newTop > 0 /*&& newBottom > panRect.Height*/)) newTop = picRect.Top;
pictureBox2.Location = new Point(newLeft, newTop);
}
Text = "" + pictureBox2.Location;
}
请注意我已注释的两部分!因为它不能移动小于视口的图片;你可以通过删除注释来允许它,但是应该在放大时将它放大并保持为零,因为它应该永远不会坐在位置范围内并且也会与重叠,否则滚动条会以怪异方式行为..!
我试着根据你的评论更新代码,但仍然是同样的问题。实际上,在放大时我增加了我的pictureBox尺寸,但面板尺寸保持不变。当我缩放图像后平移图像时,图像框位置将不受限制地改变。我希望根据面板大小加上缩放因子说明30。如果我正在平移,超出该限制,不应移动pictureBox/image。该功能应该像滚动条。超出垂直和水平滚动条的限制时,图像不应移动或移动。 –
_我想要根据面板大小加上缩放因子说30。这没有任何意义!平移总是应该跟着鼠标,不要更快或者离开它! _功能应该像滚动条._它应该在另一个方向,对吧?如果你想限制它,你只需要将它添加到代码中。除此之外,它在这里工作得很好:它的工作方式与触摸屏完全相同,当我将图像拖动到左侧时,它跟随着指尖/鼠标。 – TaW
您能否帮我解决一些代码以增加限制? –