明天我有一个测试,我们必须使用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); } }
所以,当我多次按下键箭头时,对象只会在重新调整表格大小后移动。我想让它立即移动,只使用绘画事件。
由于
答案 0 :(得分:2)
我找到了它!
按下键后添加this.Invalidate();
。这将告诉paint事件重绘。
答案 1 :(得分:0)
看起来你正在捆绑你的表单,所以它不会刷新,直到你移动它。尝试将drawArea
放在DrawUser
private void DrawUser()
{
drawArea.FillRectangle(new SolidBrush(Color.Red), xPos, yPos, 50, 50);
Application.DoEvents();
}
请注意DoEvents
,it can be evil。