繁体   English   中英

通过在鼠标事件中启用和禁用 PictureBox 中的 gif animation 来停止和启动它

[英]Stop and start gif animation in PictureBox by enabling and disabling it in mouse events

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

为什么我无法在鼠标 hover 上启用 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;
}

接收禁用控件的鼠标事件

当控件被禁用时,鼠标事件将不会被控件接收,而是由其父级接收。

因此,在这种情况下,您可以处理父级的MouseHover事件并查看鼠标 position 是否在PictureBox的边界内,然后启用它。

例如。 假设图片框的父级是以下形式:

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

在 PictureBox 中停止或启动 gif animation

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM