c# - 使用绘制事件移动对象

标签 c# winforms paint system.drawing paintevent

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

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

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

谢谢

最佳答案

我找到了!

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

关于c# - 使用绘制事件移动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602531/

相关文章:

c# - 使用 Winform C# ,删除 exe 所在的文件夹

java - 如何在 Java 中绘制对象的 ArrayList?

java - 第一次点击按钮后,按钮停止工作

c# - 在多个局部 View 中拆分单个表单是否被认为是不好的做法?

c# - 将 OpenCV 程序集与 Costura 合并时出现问题

c# - Flowlayout 面板在调整大小后不显示滚动条

ios - 为 iOS 中的绘画应用程序制作橡皮擦工具

c# - 如何在c#中创建多维数组

c# - 从 C# winforms 中 SizeMode=stretch 的用户 Drawn PictureBox 保存图像

winforms - 控制可访问