问题是您实际上是在单独绘制一条线,并且应用程序无法跟上输入(对于鼠标经过/通过的每个像素,您不会获得 MouseEvent 调用)。
您需要跟踪前一帧的鼠标位置,然后您可以在该点和当前点之间绘制一条平滑线。您可以在 mouseEnter/mouseDown 上设置“旧”位置(无论您想要什么),然后在鼠标移动时进行绘图。确保oldMousePos
在进行任何绘图之前设置变量很重要,否则您将在整个地方都有线条(甚至可能值得拥有一个检查变量以确保它是最新的)。
绘图代码:
private System.Drawing.Point oldMousePos; // old mouse position
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
System.Drawing.Point curMousePos = e.Location;
System.Drawing.Graphics g;
System.Drawing.Pen brush = new System.Drawing.Pen(Color.Blue, 5); // width of 5
g = pictureBox1.CreateGraphics();
g.DrawLine(brush, oldMousePos.X, oldMousePos.Y, curMousePos.X, curMousePos.Y); // use a pen for lines rather than a brush (between 2 points)
g.Dispose(); // mark the graphics object for collection
oldMousePos = curMousePos; // set old to be this (so you get a continuous line)
}
您可能会考虑另一种进行渲染的方法 - 在鼠标事件中创建一个 Graphics 对象有点狡猾。