1

プロジェクトにpictureBoxコントロールがあり、次のコードでRectangular2を移動したい:

 int pointx1 = 140, pointx2 = 160, pointx3 = 160, pointx4 = 140, pointy1 = 180, pointy2 = 180, pointy3 = 240, pointy4 = 240;

    private void timer1_Tick(object sender, EventArgs e)
    {
        pictureBox1.Refresh();
        Graphics graphic = pictureBox1.CreateGraphics();
        graphic.FillPolygon(new SolidBrush(Color.Black), new PointF[]{ new Point(100, 200), new Point(200, 200), new Point(200, 220), new Point(100, 220) });
        //Rectangular2 
        graphic.FillPolygon(new SolidBrush(Color.Blue), new PointF[] { new Point(pointx1++, pointy1++), new Point(pointx2++, pointy2++), new Point(pointx3++, pointy3++), new Point(pointx4++, pointy4++) });
    }

しかし、Rectangular2の描画と移動にビットマップを使用したいのは、その更新と点滅のためです。

4

1 に答える 1

1

ここでは CreateGraphics が敵です。描画を行うには、既にダブル バッファリングされている PictureBox の Paint イベントを使用します。

pictureBox1.Paint += pictureBox1_Paint;

void pictureBox1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.Clear(Color.White);
  e.Graphics.FillPolygon(new SolidBrush(Color.Black), 
                         new PointF[] { new Point(100, 200), 
                                        new Point(200, 200),
                                        new Point(200, 220),
                                        new Point(100, 220) });
  e.Graphics.FillPolygon(new SolidBrush(Color.Blue),
                         new PointF[] { new Point(pointx1, pointy1),
                                        new Point(pointx2, pointy2),
                                        new Point(pointx3, pointy3),
                                        new Point(pointx4, pointy4) });
}

次に、タイマーを使用して座標を更新し、コントロールを無効にします。

private void timer1_Tick(object sender, EventArgs e) {
  pointx1++;
  pointy1++;
  pointx2++;
  pointy2++;
  pointx3++;
  pointy3++;
  pointx4++;
  pointy4++;
  pictureBox1.Invalidate();
}
于 2013-11-12T22:33:44.980 に答える