C# winforms でパンの pictureBox を実装したいと考えています。autoScroll プロパティが true に設定されているパネルがあります。パネル内には、sizeMode が autoSize に設定されている pictureBox があります。pictureBox では、次のようなマウス イベントをリッスンしています。
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
dragging = true;
start = new Point(e.Location.X + pictureBox1.Location.X, e.Location.Y + pictureBox1.Location.Y);
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (dragging)
{
Debug.WriteLine("mousemove X: " + e.X + " Y: " + e.Y);
pictureBox1.Location = new Point(start.X - e.Location.X, start.Y - e.Location.Y);
this.Refresh();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
Debug.WriteLine("mouseup");
dragging = false;
}
問題は、ボタンを離した後も何かが mouseMove イベントを発生させ続け、画像が本来よりもはるかにゆっくりとパンされていることです。画像を数ピクセル (おそらく 2 または 3) ドラッグすると、ボタンを放した後、画像が数秒間パンされ、出力は次のようになります。
mousemove X: 66 Y: 37 mousemove X: 66 Y: 38 mousemove X: 66 Y: 39 mousemove X: 66 Y: 40 mousemove X: 66 Y: 41 mousemove X: 66 Y: 42 mousemove X: 66 Y: 43 mousemove X: 66 Y: 44 マウスムーブ X: 66 Y: 45 マウスムーブ X: 66 Y: 46
そう...