【发布时间】:2010-12-20 15:58:02
【问题描述】:
我有一个设置为 AutoSize 的图片框,以便图像强制它增长到图像的完整大小。
图片框在autoScroll = true的panel中,这样当图片大于panel的时候会出现滚动条。
如何在用户单击图像上的拖动时以编程方式滚动面板,从而重新定位图像。
我尝试使用 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;
}
是我的逻辑错了还是我对面板滚动功能的理解错了?
【问题讨论】:
标签: c# winforms panel picturebox