Перемещение объекта с событием рисования

Завтра у меня тест, и мы должны использовать событие рисования, чтобы перерисовать наши объекты, мы не можем использовать таймер.

Как говорится в 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 ответа

Я нашел это!

Добавляя this.Invalidate(); после нажатия клавиши. Это скажет событию рисования перерисовать.

Похоже, что вы связываете свою форму, поэтому она не обновляется, пока вы не переместите ее. Попробуйте поставить DoEvents после вашего drawArea в DrawUser

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

Будьте осторожны с DoEvents хотя, это может быть злом.

Другие вопросы по тегам