我正在使用一个图片框移动2个线性阶段;当Mousedown事件触发时,将picturebox坐标重新映射以匹配轴的最大行进长度,然后发送给他们进行运动。
为了改善此功能,我在此图像上添加了一个小点,以跟踪鼠标事件期间鼠标的当前位置。每次鼠标移动时,点都必须更新其表现;为此,我使用了gfx.clear(color.white);删除以前的绘制新的。问题在于,要了解轴的正确定位,图片框应显示轴的照片;但是称为gfx.clear(color)清除图像并留下白色背景。
有没有一种方法可以更新点位置而无需调用gfx.clear(以保留图像?)
if (e.Button.Equals(MouseButtons.Left))
{
{
this.gridImage.Refresh();
convertedX = (e.X * 100) / gridImage.Size.Width;
convertedY = (e.Y * 100) / gridImage.Size.Height;
using (Graphics gfx = Graphics.FromImage(this.gridImage.Image))
{
circle_bounds.X = e.X;
circle_bounds.Y = e.Y;
gfx.Clear(Color.White);
gfx.DrawEllipse(Pens.Red, this.circle_bounds);
}
Console.WriteLine("(X,Y): " + convertedX.ToString() + " " + convertedY.ToString());
Thread.Sleep(20);
//moveAbs(port1, "1", convertedX.ToString());
//moveAbs(port2, "1", convertedY.ToString());
initialXText.Text = convertedX.ToString();
initialYText.Text = convertedY.ToString();
}
}
我要做的就是使用PictureBox.Paint
事件来绘制必须跟随鼠标移动的点。首先,我声明Point
在移动时存储鼠标位置:
Point mousePosition;
然后,在PictureBox.MouseMove
事件处理程序中,我将存储此位置并使PictureBox
无效:
private void gridImage_MouseMove(object sender, MouseEventArgs e)
{
mousePosition = e.Location;
pictureBox1.Invalidate();
}
最后,在PictureBox.Paint
中,我只是使用鼠标位置绘制一个圆圈:
private void gridImage_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawEllipse(Pens.Red, new Rectangle(mousePosition, new Size(5,5)));
}
希望这能使您朝正确的方向