C# 当不应移动时移动的PictureBox

C# 当不应移动时移动的PictureBox,c#,winforms,events,mousemove,mousedown,C#,Winforms,Events,Mousemove,Mousedown,继承自PictureBox的自定义类有问题。在OnMouseDown事件中,我将光标的位置居中,在OnMouseMove事件中,我将图片框移动到 问题是,当我将光标的位置居中时,它也会移动pictureBox 我需要首先将光标定位在pictureBox的中心,然后在移动光标时移动pictureBox 我尝试放置一个bool来控制单击事件,但它的方式都是一样的 将图片盒置于正确的点的方法: public void Colocar(Control control, Unidad unidad, Po

继承自
PictureBox
的自定义类有问题。在
OnMouseDown
事件中,我将光标的位置居中,在
OnMouseMove
事件中,我将
图片框移动到

问题是,当我将光标的位置居中时,它也会移动
pictureBox

我需要首先将光标定位在
pictureBox
的中心,然后在移动光标时移动
pictureBox

我尝试放置一个bool来控制
单击事件,但它的方式都是一样的

图片盒
置于正确的
的方法:

public void Colocar(Control control, Unidad unidad, Point p)
{
    unidad.Location = p;
    control.Controls.Add(unidad);
}
OnMouseDown
事件处理程序:

bool clickPerformed = false; 
bool clickMove = false; //Para saber si hay que moverlo
private Point MouseDownLocation;
protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);

    this.Cursor = new Cursor(Cursor.Current.Handle);
    Cursor.Position = new Point(this.Location.X + this.Size.Width / 2, this.Location.Y + this.Size.Height / 2);

    clickPerformed = true; 
    Control tempSender = this.Parent; 
    tempSender.Invalidate(); 
    MouseDownLocation = e.Location;
    clickMove = true;
}
protected override void OnMouseUp(MouseEventArgs e)
{
    this.Parent.Invalidate();
    clickMove = false;
    base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    if (clickMove)
    {
        Left = e.X + Left - MouseDownLocation.X;
        Top = e.Y + Top - MouseDownLocation.Y;
    }
}
OnMouseUp
事件处理程序:

bool clickPerformed = false; 
bool clickMove = false; //Para saber si hay que moverlo
private Point MouseDownLocation;
protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);

    this.Cursor = new Cursor(Cursor.Current.Handle);
    Cursor.Position = new Point(this.Location.X + this.Size.Width / 2, this.Location.Y + this.Size.Height / 2);

    clickPerformed = true; 
    Control tempSender = this.Parent; 
    tempSender.Invalidate(); 
    MouseDownLocation = e.Location;
    clickMove = true;
}
protected override void OnMouseUp(MouseEventArgs e)
{
    this.Parent.Invalidate();
    clickMove = false;
    base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    if (clickMove)
    {
        Left = e.X + Left - MouseDownLocation.X;
        Top = e.Y + Top - MouseDownLocation.Y;
    }
}
图片框周围绘制圆的方法:

public void DrawCircle(Graphics g, Pen pen, float centerX, float centerY, float radius)
{
    g.DrawEllipse(pen, centerX - radius, centerY - radius, radius + radius, radius + radius);
}
OnMouseMove
事件处理程序:

bool clickPerformed = false; 
bool clickMove = false; //Para saber si hay que moverlo
private Point MouseDownLocation;
protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);

    this.Cursor = new Cursor(Cursor.Current.Handle);
    Cursor.Position = new Point(this.Location.X + this.Size.Width / 2, this.Location.Y + this.Size.Height / 2);

    clickPerformed = true; 
    Control tempSender = this.Parent; 
    tempSender.Invalidate(); 
    MouseDownLocation = e.Location;
    clickMove = true;
}
protected override void OnMouseUp(MouseEventArgs e)
{
    this.Parent.Invalidate();
    clickMove = false;
    base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    if (clickMove)
    {
        Left = e.X + Left - MouseDownLocation.X;
        Top = e.Y + Top - MouseDownLocation.Y;
    }
}

只是一个想法,但是你不能做一个
bool
将其设置为默认值
false
,并且仅在其为true时移动图片框,然后在鼠标居中后将其设置为
true
。告诉我如果它对你有效,我会把它变成一个答案。我知道你已经有了1个答案,所以在你将鼠标居中之前可能会一直保持该值为假。在光标位置改变后,我将布尔“clickMove”设置为真,但当我单击它时,它仍然会移动图片框。你认为我错了吗?我注释掉光标后,你的代码就工作了。定位代码。是的,但它没有把光标移到我想移到的地方。我的意思是,我需要在单击pictureBox后将光标放在pictureBox的中心,然后移动该pictureBox。但是,当我单击pictureBox时,它会移动光标,也会移动pictureBox,因此它永远不会移动到pictureBox的中心,因为光标的新位置也会移动pictureBox。我不知道你是否理解我。(很抱歉反应太晚)