GIF 动画在 Windows 窗体中不起作用



我有 2 个 WinForms

Form2 使用 Infragistics ultraTabControl。在选项卡上更改 im 显示表单 1。

在形式1中

我有一个分配了动画GIFPictureBox

在形式 2 中

我像这样显示 Form1。

Form1 frmOne=new Form1();
frmOne.Show();

问题

GIF不是在播放动画。

确保图像位于图像属性中,而不是背景图像属性中。这就是我犯

的错误

它对我来说工作正常。我刚刚在表单上拖动了一个新的图片框,并在 Form_Load(( 事件中设置图像属性并显示 GIF 动画。

我在点击按钮时和你做了同样的事情:

  TestForms.NavBarTest newForm = new TestForms.NavBarTest();
            newForm.Show();

在我的测试表格中:

private void NavBarTest_Load(object sender, EventArgs e)
        {
            pictureBox1.Image = NavronChartControl.Properties.Resources.url;
        }

注意:如果您的图片框被禁用,则它不会对 GIF 进行动画处理

参考:
如何在 Windows 窗体 (c#( 上显示动画 GIF。
C# 中的动画进度指示器(Windows 窗体(

尝试使用此链接实现:图片框中的动画 GIF 不会对应用程序进行动画处理。

实现它的最佳方法是在异步任务中运行动画,但相应地,可以使用以下内容在 Windows 窗体上执行此操作的一些限制:

System.Threading.Thread.Sleep(int milliseconds) .

我的启动视图以 gif 显示(加载(

例如:在您的构造函数中,

public partial class MainMenu : Form
{
    private SplashScreen splash = new SplashScreen();
    public MainMenu ()
    {
        InitializeComponent();
        Task.Factory.StartNew(() => {
            splash.ShowDialog();
        });
       Thread.Sleep(2000);
   }

必须在启动新线程后放置Thread.Sleep(int),不要忘记您在此线程上执行的每个操作都需要调用,例如:

    void CloseSplash()
    {
        Invoke(new MethodInvoker(() =>
        {
           splash.Close();
        }));
    }

现在你的 gif 应该可以工作了!

已解决

我目前的线程正忙于播放 GIF 动画。

我尝试了很多方法,如Application.DoEvents((等。但每件事都帮不了我。

以下使用线程的问题中的答案是一个非常好的工作想法。

堆栈溢出:显示/隐藏初始屏幕

谢谢大家。

这个问题

以前已经提出过。虽然方法不同,但问题概念是相同的

StackOverFlow:如何在Windows窗体上显示动画GIF(c#(

可在其中使用代码项目的源项目

我想这会帮助你

我遇到了同样的问题,并通过实施遇到了不同的解决方案,我曾经面临过几个不同的问题。最后,以下是我将来自不同帖子的一些片段放在一起的内容,这些片段按预期对我有用。

    private void btnCompare_Click(object sender, EventArgs e)
    {
        ThreadStart threadStart = new ThreadStart(Execution);
        Thread thread = new Thread(threadStart);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

下面是执行方法,该方法还带有调用 PictureBox 控件的功能:

    private void Execution()
    {
        btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
        Application.DoEvents();
        // Your main code comes here . . .
        btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
    }

请记住,图片框在"属性"窗口中是不可见的,或如下所示:

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

如果前面的答案都不适合你,另一个想法是刷新图像标签或使用jQuery即时编写它。
就我而言,当单击表单上的按钮时,我需要显示动画 GIF。 以前,它会显示但不具有动画效果。 我刚刚在单击按钮时添加了一个 jQuery 事件,该事件通过父标签的 html(( 函数将图像标签即时添加到div。

$('.showhidegif').html("<img src='/Content/img/angled-spinner.gif' />");
<div class="col-sm-12 showhidegif"></div>

值得一试,特别是如果你已经在页面上使用jquery。

相关内容

  • 没有找到相关文章

最新更新