如何使用picturebox创建淡入淡出按钮效果

时间:2014-02-06 22:35:01

标签: c# winforms animation graphics visual-studio-2013

我正在尝试创建一个效果,因此当用户将鼠标悬停在图片框上时,该按钮会淡化为hoverimage,当它们离开时,它会淡化回原始图像。我正在使用图片框作为程序中的按钮。我这样做是因为所有按钮都是没有按钮纹理的图片,所以我没有看到使用按钮的重点。只是这样你可以想象它,这是原始图像:

enter image description here

图像淡入:

enter image description here

我仍然可以稍微改变这些图像,但这就是一般的想法。

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

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 and pictureBox38是带有我需要的图像的不可见的参考图片框。

1 个答案:

答案 0 :(得分:1)

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

  • 您的UserControl将具有两个图像属性,一个用于法线,一个用于悬停图像
  • 您必须覆盖OnPaint方法来执行自己的自定义绘制,根据position属性将这两个图像混合到您的Graphics上。这是一个浮点数,其中0表示显示正常图像,1表示悬停图像。中间的任何值表示这两个图像的混合。我找到了一些很好的混合代码here
  • 然后你需要一个Timer来动态更新这个位置并重绘按钮(通过调用Invalidate)。我建议使用Windows.Forms.Timer,它的优点是它的Tick事件总是在主线程上执行,所以你不必使用Invoke来修改你的控件。
  • 最后但并非最不重要的是,您重写了OnMouseEnter和OnMouseLeave方法,将其全部设置为运动。这些方法可以设置positionChange属性,指示position正在改变的方向。

希望这会有所帮助......