【问题标题】:How to create fade button effect with pictureboxes如何使用图片框创建淡入淡出按钮效果
【发布时间】:2014-02-06 22:35:00
【问题描述】:

我正在尝试创建一种效果,因此当用户将鼠标悬停在图片框上时,按钮会淡出为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 and pictureBox38 是带有我需要的图像的不可见参考图片框。

【问题讨论】:

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


【解决方案1】:

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

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

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2014-01-09
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多