/// <summary>
        ///
        /// </summary>
        /// <returns>当动画已结束,返回<code>true</code></returns>
        public virtual bool RefreshLayout()
        {
            if (animator == null)
            {
                return(true);
            }
            double stamp     = animator.NowStamp();
            double leftTime  = 1 - stamp;
            bool   noRefresh = Math.Abs(stamp - 1) < 0.001;

            this.Invoke((EventHandler) delegate
            {
                Left      = (int)(TargetPos.X * stamp + PreviousPos.X * leftTime);
                Top       = (int)(TargetPos.Y * stamp + PreviousPos.Y * leftTime);
                Width     = (int)(TargetPos.Width * stamp + PreviousPos.Width * leftTime);
                Height    = (int)(TargetPos.Height * stamp + PreviousPos.Height * leftTime);
                BackColor = Color.FromArgb(
                    (int)(TargetColor.A * stamp + PreviousColor.A * leftTime),
                    (int)(TargetColor.R * stamp + PreviousColor.R * leftTime),
                    (int)(TargetColor.G * stamp + PreviousColor.G * leftTime),
                    (int)(TargetColor.B * stamp + PreviousColor.B * leftTime)
                    );
            });
            Invalidate();
            if (noRefresh)
            {
                animator = null;
            }
            return(noRefresh);
        }
 public virtual void Animate(int interval, int delay, RectangleF target, Color bckColorTarget)
 {
     PreviousPos         = this.Bounds;
     PreviousColor       = this.BackColor;
     TargetPos           = target;
     TargetColor         = bckColorTarget;
     animator            = new AnimationStamp(interval, delay);
     Program.AnimationOn = true;
 }