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。我不知道你是否理解我。(很抱歉反应太晚)