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

vq8itlhq  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(133)

我在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;
}
pprl5pva

pprl5pva1#

    • 接收禁用控件的鼠标事件**

当控件被禁用时,该控件将不接收鼠标事件,而是由其父控件接收。
因此,在本例中,您可以处理父节点的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动画之外,还可以通过调用私有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
ny6fqffe

ny6fqffe2#

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

答对了!!!

相关问题