2017-02-22 12 views
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(); 

       } 
      } 
+0

Pboxの表面に円を描画する必要があります。これを使うには 'using(Graphics gfx = gridImage.CreateGraphics)'を使います。 Refresh()!をスローします。結果は持続しませんが、それはあなたが望むものではありません、そうですか?永続的な描画の場合は、Paintイベントとそのe.Graphicsオブジェクトを使用し、gridImage.Invalidateを使用してPaintをトリガーします。 - MouseMoveでSleepについて確かですか?ひどく不安定に聞こえる!更新行の例については、[here](http://stackoverflow.com/questions/38414334/how-to-draw-an-updating-line/38419518?s=24|0.0642#38419518)を参照してください。 – TaW

+0

は魅力的に働いた!ありがとう! –

+0

注: 'Graphics gfx = gridImage.CreateGraphics()'は、データが__not persistent__なので、通常は重大な間違いです。フォームを最小化した後ここでそれを使用することは、ルールに対する__exception__がまれです! – TaW

答えて

0

何私がしなければならないポイントを描画する​​イベントを使用しているだろうマウスの動きに従います。

Point mousePosition; 

を次に、PictureBox.MouseMoveイベントハンドラで、私はこの場所を保存しPictureBox無効になります:最後に

private void gridImage_MouseMove(object sender, MouseEventArgs e) 
{ 
    mousePosition = e.Location; 
    pictureBox1.Invalidate(); 
} 

を、で最初に私はそれが動く任意の時間は、マウスの位置を保存するためにPointを宣言します​​は、私はちょうどマウスの位置を使用して円を描く:

private void gridImage_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawEllipse(Pens.Red, new Rectangle(mousePosition, new Size(5,5))); 
} 

がこの中にあなたを導きホープ右方向