【问题标题】:Stop and start gif animation in PictureBox by enabling and disabling it in mouse events通过在鼠标事件中启用和禁用它来停止和启动 PictureBox 中的 gif 动画
【发布时间】:2021-04-17 20:27:57
【问题描述】:

我向 PictureBox 添加了一个 gif,当加载表单时,我禁用了 PictureBox 以停止播放 gif。然后,当我将光标悬停在 PictureBox 上时,我想让 PictureBox 开始播放 gif,但它不播放 gif。

为什么我无法启用 PictureBox 并在鼠标悬停时播放 gif,我该如何解决这个问题?

代码:

private void MainPage_Load(object sender, EventArgs e)
{
    pictureBox1.Enabled = false;
}

private void pictureBox1_MouseHover(object sender, EventArgs e)
{
    pictureBox1.Enabled = true;  
}

private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
    pictureBox1.Enabled = false;
}

【问题讨论】:

  • 控件被禁用,这些事件不会引发。

标签: c# .net winforms picturebox


【解决方案1】:

接收禁用控件的鼠标事件

当一个控件被禁用时,鼠标事件不会被控件接收,而是被它的父控件接收。

所以在这种情况下你可以处理父级的MouseHover事件,看看鼠标位置是否在PictureBox的范围内,然后启用它。

例如。假设图片框的父级是表单:

private void form1_MouseHover(object sender, EventArgs e)
{
    if (pictureBox1.Bounds.Contains(this.PointToClient(Cursor.Position)))
    {
        pictureBox1.Enabled = true;
    }
}

在 PictureBox 中停止或启动 gif 动画

除了禁用和启用PictureBox 来启动或停止 gif 动画之外,通过调用 private void Animate(bool animate) 方法启用或禁用动画的另一个选项:

void Animate(PictureBox pictureBox, bool animate)
{
    var animateMethod = typeof(PictureBox).GetMethod("Animate",
    System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
    null, new Type[] { typeof(bool) }, null);
    animateMethod.Invoke(pictureBox, new object[] { animate });
}

然后不禁用控件:

Animate(pictureBox1, true); //Start animation
Animate(pictureBox1, false); //Stop animation

【讨论】:

  • @MustafaŞenelKargın 这两种解决方案都经过测试并且工作正常。确保您已经处理了这些事件。如果 PictureBox 直接在 Form 上,则需要处理 Form 的 Hover 事件。
  • 第一个没用,第二个没用,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多