在面板上为正方形添加动画效果

本文关键字:添加 动画 正方形 | 更新日期: 2023-09-27 18:33:19

我有一个表单面板,用于创建用于路由数据包的网络拓扑。我能够在面板上绘制拓扑。但是,现在我希望小方块在单击按钮时从一个点移动到目的地。如何在面板上执行此操作?当我点击按钮时没有任何反应。如果有人能帮助我,我将不胜感激。这是我代码的一部分:

public Form1()
{            
     InitializeComponent();
     this.SetStyle(ControlStyles.UserPaint 
          | ControlStyles.AllPaintingInWmPaint
          | ControlStyles.DoubleBuffer, true);
    //Initialize the point to start in the top left corner
    this.SetStyle(ControlStyles.UserPaint
          | ControlStyles.AllPaintingInWmPaint
          | ControlStyles.DoubleBuffer, true);
    //Initialize the point to start in the top left corner
    mPoint = new Point(mRect.Location.X, mRect.Location.X);
    //Set up the function to call when the timer fires
    TimerCallback timercb = new TimerCallback(TimerCB);
    //Set up the timer to fire at the set animation rate
    mTimer = new System.Threading.Timer(timercb,
        null, ANIMATION_RATE, ANIMATION_RATE);    
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
    if(sendbut) {
        Graphics dc = panel2.CreateGraphics();
        //Fill the background of the client area
        dc.FillRectangle(SystemBrushes.Control, this.ClientRectangle);
        //Draw the big rectangle track
        dc.DrawRectangle(Pens.Black, mRect);
        //Clone the point
        Point p = new Point(mPoint.X, mPoint.Y);
        //Offset it by half the width and height of the desired rectangle
        p.Offset(-(RECT_WIDTH / 2), -(RECT_HEIGHT / 2));
        //Draw the little moving rectangle
        dc.FillRectangle(Brushes.Black, 
            new Rectangle(p, new Size(RECT_WIDTH, RECT_HEIGHT)));
    }
}
protected void TimerCB(object o)
{
    //Move the rectangle
    MovePoint();
    //Redraw the form
    Invalidate();
}
private void button3_Click(object sender, EventArgs e)
{          
    sendbutt = true;
}

在面板上为正方形添加动画效果

假设 panel2_Paintpanel2.Paint 事件的处理程序,则在绘制发生将调用该方法。相反,您要做的是创建一个从 Panel 继承的自定义控件,并重写 OnPaint 方法。看这里。