問題は、効果的に点だけを線で描いていることであり、アプリケーションは入力に追いつくことができません(マウスが通過/通過するすべてのピクセルに対して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オブジェクトを作成するのは少し危険です。