为什么移动矩形不一致?

时间:2019-06-20 19:06:53

标签: c# .net winforms

我对C#还是很陌生,我正在尝试制作一个简单的程序,该程序允许使用输入来移动矩形。问题在于,当在C#中更新矩形的位置时,矩形有时似乎会消失很短的时间,然后重新出现在新位置,而不是始终如一地移动。

我已经使用p5.js和java(Jswing)做过类似的事情。

这是我写的代码

 public class WinFormsTest : Form
{
    System.Windows.Forms.Timer timer;
    Graphics graphics;
    Brush brush;
    Rectangle rect = new Rectangle(0, 0, 80, 80);

    public WinFormsTest()
    {
       Draw();
    }

    public void Draw()
    {
        Text = "HelloWold";
        Height = 800;
        Width = 800;

        timer = new System.Windows.Forms.Timer();
        timer.Interval = 1;
        timer.Tick += new EventHandler(timer_Tick);
        Invalidate();
        timer.Start();

    }
    private void timer_Tick(object sender, EventArgs e)
    {
        graphics = CreateGraphics();
        brush = new SolidBrush(Color.Green);
        graphics.Clear(Color.White);
        Random rnd = new Random();
        graphics.FillRectangle(brush, rect);
        rect.X++;
        rect.Y++;

    }

    public static void Main(string[] args)
    {
        Application.Run(new WinFormsTest());
    }
}

我希望矩形能够连续移动而不会消失或消失。

1 个答案:

答案 0 :(得分:3)

请勿在winforms中执行此操作。它对图形加速或优化的支持非常有限。

尝试wpfuwp,它具有许多与开箱即用的动画有关的功能。

请参见Microsoft docs

您也可以寻求DirectX解决方案,但这将是一个过大的杀伤力。

请注意,这些框架通常使用MVVM模式,其中您有一个Page及其代码,一个ViewModel作为数据源,而{{ 1}}由View组成。

与普通的XAML相比,这要难一些,但是如果您是一个学习者,并且实际上想构建外观漂亮的应用程序,肯定是要走的路。


WPF动画带有很多基类/帮助类,如here

以下是一个示例,纯WinForms

XAML