2012-03-01 20 views
2

描画されたグラフィックスアイテムを移動しようとしていますが、私は描画することができます。しかし、私はそれを移動しようとすると、それはちょうど元の上に別のアイテムを描画します。私は、InvalidateとpictureBox1.Invalidateを試みました。まだ幸運は両方の項目をpictureBoxに印刷するだけです。 ありがとうございます。C#問題を無効にする

 private void button1_Click(object sender, EventArgs e) 
    { 
     count++; 
     button1.Text = "Move"; 

     if (count == 1) 
     { 

     car(); 
     } 
     else if (count == 2) 
     { 

      car1(); 
     } 
    } 
    public void car() 
    { 
     Invalidate(); 
     g = pictureBox1.CreateGraphics(); 
     g.DrawEllipse(pen1, 50, 125, 30, 30); 
     g.DrawEllipse(pen1, 150, 125, 30, 30); 
     g.DrawRectangle(pen2, 45, 75, 140, 50); 
     g.DrawLine(pen2, 65, 75, 80, 35); 
     g.DrawLine(pen2, 80, 35, 140, 35); 
     g.DrawLine(pen2, 140, 35, 160, 75); 
     // Create string to draw. 
     String drawString = "Price: "+(cost).ToString("C"); 
     // Create font and brush. 
     Font drawFont = new Font("Arial", 16); 
     SolidBrush drawBrush = new SolidBrush(Color.Black); 
     // Create point for upper-left corner of drawing. 
     PointF drawPoint = new PointF(50, 95); 
     // Draw string to screen. 
     g.DrawString(drawString, drawFont, drawBrush, drawPoint); 

    } 
    public void car1() 
    { 
     Invalidate(); 
     g = pictureBox1.CreateGraphics(); 
     g.DrawEllipse(pen1, 50 + m, 125, 30 , 30); 
     g.DrawEllipse(pen1, 150 + m, 125, 30 , 30); 
     g.DrawRectangle(pen2, 45 + m, 75, 140, 50); 
     g.DrawLine(pen2, 65 + m, 75, 80 + m, 35); 
     g.DrawLine(pen2, 80 + m, 35, 140 + m, 35); 
     g.DrawLine(pen2, 140 + m, 35, 160 + m, 75); 
     // Create string to draw. 
     String drawString = "Price: " + (cost).ToString("C"); 
     // Create font and brush. 
     Font drawFont = new Font("Arial", 16); 
     SolidBrush drawBrush = new SolidBrush(Color.Black); 
     // Create point for upper-left corner of drawing. 
     PointF drawPoint = new PointF(50 + m, 95); 
     // Draw string to screen. 
     g.DrawString(drawString, drawFont, drawBrush, drawPoint); 
    } 
+0

質問を根本的に別のものに変更したため、質問を元の状態に戻しました。 「新しい」質問がある場合は、自由に新しい質問をしてください。この記事を参考にして背景情報を参照することができます。 – LarsTech

答えて

3
のPictureBoxのPaintイベントにコードを移動し、グラフィックスが使用可能な引数のオブジェクトを使用し

private void pictureBox1_Paint(object sender, PaintEventArgs e) { 
    e.Graphics.Clear(Color.White); 

    if (count == 1) 
    DrawCar1(e.Graphics); 

    if (count == 2) 
    DrawCar2(e.Graphics); 
} 

public void DrawCar1(Graphics g) 
{ 
    g.DrawEllipse(pen1, 50, 125, 30, 30); 
    g.DrawEllipse(pen1, 150, 125, 30, 30); 
    // etc. 
} 

public void DrawCar2(Graphics g) 
{ 
    // etc. 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    count++; 
    button1.Text = "Move"; 
    pictureBox.Invalidate(); 
} 

あなたのコードは、単にフォームをピクチャボックスをクリアしたことがないが、それはそれは単なる一時的なキャンバスですのでCreateGraphics()を使うのは間違いです。フォームを最小化すると、そのメソッドを使用するすべての図が消去されます。

あなたのコードは、おそらく "Car"クラスを持つようにリファクタリングする必要があります。 Car1とCar2の描画ルーチンを持つことはあまり実用的ではありません。移動し続ける場合は、Car#ルーチンをさらに追加し続けることは望ましくありません。車の描画ルーチンを1つ作成し、 "Car"クラスの位置情報を保持して、車を描画する場所を "どこで"知るようにします。

+0

大丈夫、私は車の描画のためのクラスを作成しましたが、私はそれを作成するために行くときに私はエラー2を取得埋め込みステートメントは宣言またはラベルステートメント – Sloshy

関連する問題