zoukankan      html  css  js  c++  java
  • WinForm上显示gif动画:转

    WinForm上的ProgressBar,老实说,实在是不敢恭维,太死板,太难看了,即使做成实时显示处理进度的,它还是逃离不了“难看”。现 在的web2.0上到处都能看到一个显示正在处理的小圆圈在那转啊转,以表示正在处理,虽然它不是实时的,只是个gif动画,但它的效果总感觉要比 winform上的progressBar要赏心悦目的多。那我在winform 上是否也可以用这种gif动画来显示处理进度呢?答案是显然的,肯定可以,听说pictureBox就可以显示gif动画,只要把该控件的image属性 设置成我们所指的gif动画就可以了,编译,运行,噢,gif动画罢工了,它根本就没有动起来,只是停留在某一帧。看来这种走捷径的方式在IT民工业是行 不通的。

          那我们还是用ImageAnimator.Animate()方法吧,发现语言组织不起来,还是用直接看代码来的快,越来越觉得自己可悲了。。。。话都说不清楚。。。

    //首先定义私有变量 
    
    private Image m_img=null;
    
    private EventHandler evtHandler=null;
    
    //重载的当前winform的OnPaint方法,当界面被重绘时去显示当前gif显示某一帧
    
    protected override void OnPaint(PaintEventArgs e)
    
    {
    
        base.OnPaint(e);
    
        if (m_Image != null)
    
        {
    
            //获得当前gif动画下一步要渲染的帧。
    
            UpdateImage();
    
            //将获得的当前gif动画需要渲染的帧显示在界面上的某个位置。
    
            e.Graphics.DrawImage(m_Image, new Rectangle(145, 140, m_Image.Width, m_Image.Height));
    
        }
    
    }
    
    //实现Load方法
    
    private Load(object sender,EventArgs e)
    
    {
    
        //为委托关联一个处理方法
    
        evtHandler=new EventHandler(OnImageAnimate);
    
        //获取要加载的gif动画文件
    
        m_img=Image.FromFile(Application.StartupPath+"\loading.gif");
    
        //调用开始动画方法
    
        BeginAnimate();
    
    }
    
    //开始动画方法
    
    private void BeginAnimate()
    
    {
    
        if(m_img!=null)
    
        {
    
            //当gif动画每隔一定时间后,都会变换一帧,那么就会触发一事件,该方法就是将当前image每变换一帧时,都会调用当前这个委托所关联的方法。
    
            ImageAnimator.Animate(m_img,evtHandler);
    
        }
    
    }
    
    //委托所关联的方法
    
    private void OnImageAnimate(Object sender, EventArgs e)
    
    {
    
        //该方法中,只是使得当前这个winfor重绘,然后去调用该winform的OnPaint()方法进行重绘)
    
        this.Invalidate();
    
    }
    
    //获得当前gif动画的下一步需要渲染的帧,当下一步任何对当前gif动画的操作都是对该帧进行操作)
    
    private void UpdateImage()
    
    {
    
        ImageAnimator.UpdateFrames(m_Image);
    
    }
    
    //关闭显示动画,该方法可以在winform关闭时,或者某个按钮的触发事件中进行调用,以停止渲染当前gif动画。
    
    private void StopAnimate()
    
    {
    
        m_Image = null;
    
        ImageAnimator.StopAnimate(m_Image,evtHandler);
    
    }
    终于可以看到gif动画了,如果动画左侧或者上沿再标上一段文字"loading....",这不是和web2,0的效果一样的了么,但是实现起来却复杂的许多。。。
  • 相关阅读:
    pycharm修改快捷键
    pycharm如何解决新建的文件没有后缀的问题
    创建py模板
    用ctrl+鼠标滚动调节字体大小
    pycharm调整代码长度分割线
    pycharm怎么设置代码自动补齐
    python3用BeautifulSoup抓取div标签
    python3用BeautifulSoup用re.compile来匹配需要抓取的href地址
    python3用BeautifulSoup用limit来获取指定数量的a标签
    python3用BeautifulSoup用字典的方法抓取a标签内的数据
  • 原文地址:https://www.cnblogs.com/candyzhmm/p/5692929.html
Copyright © 2011-2022 走看看