使用Paint事件移动对象

时间:2013-09-03 22:29:40

标签: c# winforms paint system.drawing paintevent

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

正如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);
    }
}

所以,当我多次按下键箭头时,对象只会在重新调整表格大小后移动。我想让它立即移动,只使用绘画事件。

由于

2 个答案:

答案 0 :(得分:2)

我找到了它!

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

答案 1 :(得分:0)

看起来你正在捆绑你的表单,所以它不会刷新,直到你移动它。尝试将drawArea放在DrawUser

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

请注意DoEventsit can be evil