C# 如何使用pictureboxes创建淡入淡出按钮效果

C# 如何使用pictureboxes创建淡入淡出按钮效果,c#,winforms,animation,graphics,visual-studio-2013,C#,Winforms,Animation,Graphics,Visual Studio 2013,我正在尝试创建一种效果,这样当用户将鼠标悬停在picturebox上时,按钮会淡入hoverimage,当他们离开时,按钮会淡入原始状态。我在程序中使用图片框作为按钮。我这样做是因为所有的按钮都是没有按钮纹理的图片,所以我没有看到使用按钮的意义。为了让你能看到它,这里是原始图像: 以及要淡入的图像: 我仍然可以稍微更改这些图像,但这是总体思路 我将如何创建这种褪色效果?我正在用定时器和不透明度设置来描绘一些东西,但我不知道这些东西能帮我解决这个问题 E:这是我的一些代码。当我悬停时,它会随着

我正在尝试创建一种效果,这样当用户将鼠标悬停在picturebox上时,按钮会淡入
hoverimage
,当他们离开时,按钮会淡入原始状态。我在程序中使用图片框作为按钮。我这样做是因为所有的按钮都是没有按钮纹理的图片,所以我没有看到使用按钮的意义。为了让你能看到它,这里是原始图像:

以及要淡入的图像:

我仍然可以稍微更改这些图像,但这是总体思路

我将如何创建这种褪色效果?我正在用定时器和不透明度设置来描绘一些东西,但我不知道这些东西能帮我解决这个问题

E:这是我的一些代码。当我悬停时,它会随着图像的变化而变化,但不会褪色,而且看起来很起伏

    private void pictureBox3_MouseEnter(object sender, EventArgs e)
    {
        pictureBox3.Image = pictureBox37.Image;
    }

    private void pictureBox3_MouseLeave(object sender, EventArgs e)
    {
        pictureBox3.Image = pictureBox38.Image;
    }

pictureBox37和pictureBox38
是不可见的带有我所需图像的参考PictureBox。

我认为WinForms不支持此类动画,因此您必须手动执行此操作。如果这些按钮不止一个,我建议您使用此功能创建自己的UserControl。我可以给你一些建议如何做到这一点:

  • 用户控件将有两个图像属性,一个用于普通图像,另一个用于悬停图像
  • 您必须重写OnPaint方法来进行自定义绘制,根据
    位置
    属性将这两个图像混合到图形中。这是一个浮点数,其中0表示显示正常图像,1表示悬停图像。中间的任何值都表示这两个图像的混合。我发现了一些很好的混合代码
  • 然后,您需要一个计时器来动态更新此位置并重新绘制按钮(通过调用Invalidate)。我建议使用Windows.Forms.Timer,它的优点是它的Tick事件总是在主线程上执行,因此您不必使用Invoke来修改控件
  • 最后但并非最不重要的一点是重写onMouseCenter和OnMouseLeave方法,以将这一切都设置为运动。这些方法可以设置一个
    positionChange
    属性,该属性指示
    position
    的变化方向
希望这有助于