Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建播放动画GIF的Windows窗体(C#)工具提示_C#_.net_Winforms_Tooltip - Fatal编程技术网

创建播放动画GIF的Windows窗体(C#)工具提示

创建播放动画GIF的Windows窗体(C#)工具提示,c#,.net,winforms,tooltip,C#,.net,Winforms,Tooltip,当用户将鼠标悬停在Windows窗体应用程序上的某些图标上时,我试图显示GIF。GIF必须显示在表单的实际区域之外,完美的解决方案看起来像一个工具提示,IsBallon设置为True,完美地环绕GIF 在修改了一个类似问题的解决方案后,我能够在工具提示中只渲染一个图像。然而,无论出于何种原因,这都不会使GIF动画化,我尝试单步浏览GIF帧的尝试迄今为止都失败了。我已经在搜索结果表单上完成了这项操作。将鼠标悬停在图像上会弹出同一图像的较大版本。这是通过在图标/图像的鼠标输入事件期间创建一个带有Do

当用户将鼠标悬停在Windows窗体应用程序上的某些图标上时,我试图显示GIF。GIF必须显示在表单的实际区域之外,完美的解决方案看起来像一个工具提示,IsBallon设置为True,完美地环绕GIF


在修改了一个类似问题的解决方案后,我能够在工具提示中只渲染一个图像。然而,无论出于何种原因,这都不会使GIF动画化,我尝试单步浏览GIF帧的尝试迄今为止都失败了。

我已经在搜索结果表单上完成了这项操作。将鼠标悬停在图像上会弹出同一图像的较大版本。这是通过在图标/图像的鼠标输入事件期间创建一个带有Dock.Fill PictureBox的表单来完成的。我将新的PictureBox保存在原始图标/图像的Tag属性中。在MouseLeave上,我刚刚处理了表格和图片盒

以下是我的代码,请根据您的需要进行修改:

    void pb_MouseEnter( object sender, EventArgs e )
    {
        // sender was my original image. You may need to perform type checks
        PictureBox pb = ((PictureBox)sender);
        // Ignore empty images
        if (pb.Image == null)
            return;

        Form f = new Form();
        f.ControlBox = false;
        f.Enabled = false;
        f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;

        // Modify to suit your location
        f.Location = new Point( pb.TopLevelControl.Location.X + pb.Location.X - f.Width - 25, MousePosition.Y - f.Height / 2 );

        f.ShowInTaskbar = false;
        f.Size = new System.Drawing.Size( 300, 256 );
        f.StartPosition = FormStartPosition.Manual;
        f.TopMost = true;

        PictureBox pb2 = new PictureBox();
        pb2.Dock = DockStyle.Fill;

        pb2.Image = (Image)pb.Image.Clone();
        pb2.SizeMode = PictureBoxSizeMode.Zoom;
        f.Controls.Add( pb2 );

        pb.Tag = pb2;
        f.Show();
        this.Focus();
    }

    void pb_MouseLeave( object sender, EventArgs e )
    {
        PictureBox pb = ((PictureBox)sender);
        if (pb.Tag != null)
        {
            PictureBox pb2 = (PictureBox)pb.Tag;
            Form f = (Form)pb2.Parent;
            pb2.Dispose();
            f.Dispose();
            pb.Tag = null;
        }
    }

工作很好,但要真正让GIF运行,我必须在另一个线程上运行它。下面的人成功了
System.Threading.Tasks.Task t=new System.Threading.Tasks.Task(()=>pb.Image=sourceGif);t、 Start()