两个Pictruebox,用于放背景的Pic1和用于放小图的Pic2。希望能实现鼠标拖拽Pic2在Pic1上移动,但不能超出Pic1的边框范围。即Pic2的左边框不能超出Pic1的左边框,Pic2的右边框不能超出Pic1的右边框。上下亦然。
bool ismoving = false;
int downx = 0;
int downy = 0;
private void pictureBox2_MouseDown(object sender, MouseEventArgs e)
{
ismoving = true;
downx = e.X;
downy = e.Y;
}
private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
{
ismoving = false;
checkOutborder(pictureBox1, pictureBox2);
}
bool checkOutborder(Control father,Control child)
{
bool t,l,r,b=false ;
l= (child.Left < father.Left);
if (l)
{
downx = downx - (father.Left - child.Left);
child.Left = father.Left;
}
r = ( child.Right > father.Right);
if (r)
{
downx = downx -(father.Right - child.Right );
child.Left = father.Right - child.Width;
}
t = (child.Top < father.Top);
if (t)
{
downy = downy - (father.Top - child.Top);
child.Top = father.Top;
}
b = (child.Bottom > father.Height + father.Top);
if (b)
{
downy = downy - (father.Bottom - child.Bottom);
child.Top = father.Bottom -child.Height ;
}
return (r|l|b|t);
}
private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
{
if (ismoving )
{
if (!checkOutborder(pictureBox1, pictureBox2))
{
pictureBox2.Left = pictureBox2.Left + (e.X - downx);
pictureBox2.Top = pictureBox2.Top + (e.Y - downy);
}
}
}