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的效果一样的了么,但是实现起来却复杂的许多。。。
时间: 2024-10-23 11:15:48

WinForm上显示gif动画:转的相关文章

winform中的状态栏,以及在状态栏目上显示时间

1:在winform上添加状态栏,并且在状态栏目上多添加几个label. step1:拖一个StatusStrip到winform上,名字默认为statusStrip1.找到statusStrip1的items属性,双击打开添加3个StatusLabel.名字默认分别为toolStripStatusLabel1.toolStripStatusLabel2.toolStripStatusLabel3.他们分别是从左到右显示.设置toolStripStatusLabel2的属性的BorderSide

Winform之跨线程访问控件(在进度条上显示字体)

此文章对于遇到必须使用线程但是没有办法在线程内操作控件的问题的处理  有很好的解决方案(个人认为的.有更好的方案欢迎交流.) 在做跨线程访问之前我们先了解下我们所做的需要达到的效果: 这个是批量的将xml文件导入sqlite数据库   每个xml有将近3000的节点  每个节点有5个属性,如果我们不用线程那么在数据导入的过程中   程序很可能卡死   而且基本上动不了,用户的体验性就很差. 所以我们对向数据库添加数据的地方使用了线程: Thread thread = new Thread(new

在状态栏上做渐变动画效果

效果 说明 1. 在状态栏上显示信息并覆盖状态栏信息需要技巧 2. 本设计支持外部消息view的定制,只需要实现规定的协议方法即可 源码 https://github.com/YouXianMing/StatusBarMessage // // StatusMessage.h // StatusBarView // // Created by YouXianMing on 15/7/24. // Copyright (c) 2015年 YouXianMing. All rights reserv

C# Winform 双屏显示

双屏显示1 // 利用WinForm中的Screen类,即可比较方便地实现多窗体分别在多个屏幕上显示. //•获取当前系统连接的屏幕数量: Screen.AllScreens.Count(); //•获取当前屏幕的名称:string CurrentScreenName = Screen.FromControl(this).DeviceName; //•获取当前屏幕对象:Screen CurrentScreen = Screen.FromControl(this); //•获取当前鼠标所在的屏幕:

弹出输入文本框上弹的动画效果

先看以下简单的模型图片效果,有图才有真相: 软键盘弹出效果: 终极效果实现: 效果呢就是这样: 简单解释一下:由于显示页面要承载很多的信息内容,所以在让用户发布动态的时候,要求从页面的底部以动画的方式向上抽出.当弹出软键盘输入法的时候,要避免输入框被全部遮挡或者部分遮挡.则,软键盘要把输入文本框顶起来,完全的托起来. 那么,就要完成这几步骤: 1,在该页面的类中(Actiivty或者fragment),在加载该布局之前添加这句话,其作用是使文本框根据软键盘弹出自动调节位置和大小: getWind

MFC显示GIF动画图片

本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程.  附件  GifPicture.rar (138.1 KB) 上传时间:2009-11-25 16:15下载次数:1173 一.显示GIF图片控件类的介绍:   无论是在VC6.0还是在VS2008中,都没有控件能显示GIF动画图片.能显示一些静态图片的只是Picture控件.本例程用到的GIF动画显示控件类是PictureEX.其定义文件是Pictu

显示gif动画(帧动画的播放)

在android上显示gif不太方便,虽然有控件可以实现,但是效果不是很好,保险点儿的作法还是使用帧动画来处理.①在XML中定义animation-list:<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="fa

用BadgeView在actionbar menu上显示提醒信息

有时候需要在actionbar menu上显示消息个数,所以可以用BadgeView来实现. 实现方法是获取actionbar menuitem的view,然后创建BadgeView.注意,通常只能在Optionsmenu创建完成之后去获取menuitem的view.我们可以在onCreate方法中延时1秒去处理. <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="ht

IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果

拖个button继承一下  几行代码 就搞定 自用效果还行 IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果,布布扣,bubuko.com