2

我明天有一个测试,我们必须使用绘画事件来重绘我们的对象,我们可能不会使用计时器。

正如 MSDN 所说:“重绘控件时会引发 Paint 事件。” ,但是,据我所知,只有当表单最小化或变得不可见并重新可见时才会发生这种情况。

我的代码:

public partial class Form1 : Form
{
    public Graphics drawArea;
    public int xPos, yPos;

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        drawArea = e.Graphics;
        DrawUser();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        { 
            case Keys.Down:
                yPos++;
                break;
            case Keys.Up:
                yPos--;
                break;
            case Keys.Left:
                xPos--;
                break;
            case Keys.Right:
                xPos++;
                break;
        }
    }

    private void DrawUser()
    {
        drawArea.FillRectangle(new SolidBrush(Color.Red), xPos, yPos, 50, 50);
    }
}

因此,当我多次按下键箭头时,对象仅在我重新调整表单大小后才会移动。我希望它立即移动,仅使用绘画事件。

谢谢

4

2 回答 2

2

我找到了!

通过this.Invalidate();在按下键后添加。这将告诉绘制事件重绘。

于 2013-09-03T22:52:58.037 回答
0

看起来您正在绑定表单,因此在您移动它之前它不会刷新。尝试在你的in之后放置DoEventsdrawAreaDrawUser

private void DrawUser()
{
    drawArea.FillRectangle(new SolidBrush(Color.Red), xPos, yPos, 50, 50);
    Application.DoEvents();
}

不过要小心DoEvents它可能是邪恶的。

于 2013-09-03T22:40:26.847 回答