0
我正在使用pictureBox移動2個線性階段;當mouseDown事件觸發時,將重新映射pictureBox座標以匹配軸的最大行程長度,然後發送給它們以執行移動。更新pictureBox上的圓圈位置
爲改善此功能,我在此圖像上添加了一個小點以便在mouseDown事件期間跟蹤鼠標的當前位置。 每當鼠標移動時,點必須更新其位置;爲了做到這一點,我使用了gfx.Clear(Color.White);刪除前一個並繪製新的。 問題是要了解軸的正確定位,pictureBox應顯示軸的照片;但調用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();
}
}
你應該畫圓到P盒的表面上。使用'使用(圖形gfx = gridImage.CreateGraphics)'爲此;拋出一個Refresh()!.結果不會持續,但那不是你想要的,對吧?對於持久性繪圖,使用Paint事件及其e.Graphics對象和gridImage.Invalidate來觸發Paint .. - 你確定在MouseMove中睡眠嗎?聽起來非常不穩!有關更新行示例,請參見[這裏](http://stackoverflow.com/questions/38414334/how-to-draw-an-updating-line/38419518?s=24|0.0642#38419518)! – TaW
工作就像一個魅力!謝謝! –
注意:'Graphics gfx = gridImage.CreateGraphics()'通常是一個嚴重的錯誤,因爲數據是__not persistent__,也就是說,在最小化形式之後。在這裏使用它是規則中罕見的__exception__! – TaW