当我点击图片并移动图片框时,我需要更新滚动条位置。它总是在开始时,它只在右侧(水平)和向下(垂直)移动。
private void pictureBox1_MouseMove_1(object sender, MouseEventArgs e)
{
....
Point currentMousePos = e.Location;
int distanceX = currentMousePos.X - mouseX;
int distanceY = currentMousePos.Y - mouseY;
int newX = pictureBox1.Location.X + distanceX;
int newY = pictureBox1.Location.Y + distanceY;
if (newX + pictureBox1.Image.Width + 10 < pictureBox1.Image.Width && pictureBox1.Image.Width + newX + 10 > panel1.Width)
{
pictureBox1.Location = new Point(newX, pictureBox1.Location.Y);
}
if (newY + pictureBox1.Image.Height + 10 < pictureBox1.Image.Height && pictureBox1.Image.Height + newY + 10 > panel1.Height)
{
pictureBox1.Location = new Point(pictureBox1.Location.X, newY);
}
}
答案 0 :(得分:12)
我认为您需要更改父面板的AutoScrollPosition
,而不是使用Location
的{{1}}点。毕竟,父面板的滚动条已经在处理PictureBox
。
尝试这样的事情(顺便说一句,我的代码只在按下按钮时执行此操作,否则,我认为这将是一个奇怪的用户界面设计):
PictureBox
答案 1 :(得分:3)
LarsTech的代码不是100%正确。 2注意事项:
请注意,如果移动滑块,则屏幕上的相同点会更改其相对于pictureBox1
的坐标(随着移动的滑块移动pictureBox
)。因此,我们希望使用屏幕坐标(Control.MousePosition
代替e.Location
)。
更改panel1.AutoScrollPosition
会导致pictureBox
相对于mouseCursor
的移动,因此pictureBox1.MouseMove
事件会再次触发,即使光标没有移动到屏幕。添加_StartPoint = Control.MousePosition
可防止不必要的滚动。