Перемещение объекта с событием рисования
Завтра у меня тест, и мы должны использовать событие рисования, чтобы перерисовать наши объекты, мы не можем использовать таймер.
Как говорится в 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
хотя, это может быть злом.