我们可以在C#中移动形状(钻石)

时间:2010-04-23 17:40:33

标签: c# gdi+ shapes

我想在表格中移动钻石形状(例如每200毫秒2个像素)。 我在From_Paint Event中使用了以下代码。

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Point p1 = new Point(5,0);
    Point p2 = new Point(10, 5);
    Point p3 = new Point(5, 10);
    Point p4 = new Point(0, 5);
    Point[] ps = { p1, p2, p3, p4, p1 };
    g.DrawLines(Pens.Black, ps);
}

我知道如何移动图片框但是如何处理形状。

谢谢, ANI

2 个答案:

答案 0 :(得分:2)

您需要在表单级变量中跟踪当前位置。如果这样做,Form1_Paint事件可以在每次绘制时更改X像素位置。

只需在表单中添加一个Timer,并将其间隔设置为200ms。每200ms,将当前X像素加2,并使控件无效(重绘)。


修改:将其添加到您的表单:

int xOffset = 0;

然后,在你的timer_Tick:

private void timer1_Tick(object sender, EventArgs e)
{
    if (xOffset < 500)
        xOffset += 2;
    else
        timer1.Enabled = false; // This will make it only move 500 pixels before stopping.... Change as desired.

    this.Invalidate(); // Forces repaint
}

将您的绘画事件更改为:

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Point p1 = new Point(5 + xOffset,0);
    Point p2 = new Point(10 + xOffset, 5);
    Point p3 = new Point(5 + xOffset, 10);
    Point p4 = new Point(0 + xOffset, 5);
    Point[] ps = { p1, p2, p3, p4, p1 };
    g.DrawLines(Pens.Black, ps);
}

答案 1 :(得分:0)

使用Timer,然后在每个刻度上重绘。