如何创建与C#的按钮哈弗动画光晕效果?(How to create animated glow ef

2019-10-19 11:45发布

我创建我的应用程序的CustomButton控制。 现在,我想这样做,当鼠标上的按钮它应该显示发光效果,当鼠标离开它应该回到正常的。 但发光效果应该不会立即显示出来。 它应与动画显示。 就像Chrome浏览器分页页面 。 我曾尝试在按钮控制这个逻辑。

这是我的逻辑。 但是,我认为这不是一个正确的方式。 请提出适当的方式获得辉光效果。

private void ShowGlow()
{
    for (int i = 0; i<50; i+= 5)
    {
         Sleep(100);
         Graphics g = this.CreateGraphics();
         Color color = Color.FromArgb(i, 150,150,25);
         g.FillRectangle(new SolidBrush(color), this.ClientRectangle);
    }
}

其他详细信息的Visual Studio 2005,Windows XP和Windows窗体控件

Answer 1:

我建议你一个简单的方法。 创建两个图像,具有发光效果和无。 并使用此代码。

上的MouseEnter:

private void MyButton_MouseEnter(object sender, EventArgs e)
{
    MyButton.BackgroundImage = Properties.Resources.WithGlow; 
}

在鼠标离开:

private void MyButton_MouseLeave(object sender, EventArgs e)
{
    MyButton.BackgroundImage = Properties.Resources.WithoutGlow; 
}

这是我平时在我的项目做。



Answer 2:

下面是一个使用定时器和覆盖OnPaint方法的一些代码。 它跳过了10,而不是1,因为我怕你不会看到效果的速度不够快,否则。 计时器间隔以毫秒为单位,并设定为100,因为这是你在使用睡眠您的原来的例子是什么。 如果你需要的效果,以提高工作效率,可以减少间隔。 如果它应该会比较慢,你可以增加间隔时间,或减少多少增加阿尔法与每个刻度。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LicensePlate
{
    /// <summary>
    /// The GlowButton class
    /// </summary>
    public class GlowButton : Button
    {
        #region Fields
        Timer timer;
        private int alpha;
        Color color;

        #endregion

        #region Events

        #endregion

        #region Constructor


        /// <summary>
        /// Creates a new instance of the GlowButton class.
        /// </summary>
        public GlowButton()
        {
            timer = new Timer();
            timer.Interval = 100;
            timer.Tick += timer_Tick;
        }


        #endregion

        #region Methods

        /// <summary>
        /// Only used if you need something else to trigger the glow process
        /// </summary>
        private void ShowGlow()
        {
            timer.Start();
        }

        /// <summary>
        /// Start the timer and reset glow if the mouse enters
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMouseEnter(EventArgs e)
        {
            timer.Start();
            alpha = 0;
        }


        /// <summary>
        /// Reset the glow when the mouse leaves
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMouseLeave(EventArgs e)
        {
            timer.Stop();
            alpha = 0;
            color = BackColor;
            Invalidate();
        }


        /// <summary>
        /// Override paint so that it uses your glow regardless of when it is instructed to draw
        /// </summary>
        /// <param name="pevent"></param>
        protected override void OnPaint(PaintEventArgs pevent)
        {
            base.OnPaint(pevent);
            if (alpha > 0)
            {
                using (Brush b = new SolidBrush(color))
                {
                    pevent.Graphics.FillRectangle(b, this.ClientRectangle);
                }
            }

            //base.OnPaint(pevent);
        }

        /// <summary>
        /// Use a timer tick to set the color and increment alpha
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void timer_Tick(object sender, EventArgs e)
        {
            alpha+=10;
            color = Color.FromArgb(alpha, 150, 150, 25);
            if (alpha > 50) {
                timer.Stop();
            }

            Invalidate();
        }

        #endregion




    }
}


文章来源: How to create animated glow effect on Button Hover with C#?