博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
载入条LoadingBar
阅读量:5046 次
发布时间:2019-06-12

本文共 3338 字,大约阅读时间需要 11 分钟。

  这个控件太傻瓜了,只搁在博客里算了。日前需要用到一个载入条,

但不想找GIF图片,.NET里面没有提供这个控件,只有ProgressBar。自己写吧!要写也不难,就是周期性绘制一个长方形,让那个长方形不停地向右移动。这个周期性的操作可以开一条线程Thread。我就用了一个WinForm的控件Timer

  用到了GDI+,重写OnPaint方法是免不了的。

1         protected override void OnPaint(PaintEventArgs e) 2         { 3             base.OnPaint(e); 4             Rectangle rec=new Rectangle((int)(curLen - this.Width * barLength), 1, (int)(this.Width * barLength), this.Height - 2); 5             if (Application.RenderWithVisualStyles) 6             { 7                 VisualStyleRenderer glyphRenderer = new VisualStyleRenderer(VisualStyleElement.ProgressBar.Chunk.Normal); 8                 glyphRenderer.DrawBackground(e.Graphics, rec); 9             }10             else11                 e.Graphics.FillRectangle(Brushes.Green, rec);12 13             e.Graphics.DrawRectangle(Pens.Black, 0, 0, this.Width-1, this.Height-1);14 15 16         }

自从上次写了那个可分租的GroupGridView之后,学多了一样东西,利用VisualStyleRenderer这个类的就可以使用上系统上的三维效果。

在Timer控件的Tick事件绑定以下方法,

1         private void timer1_Tick(object sender, EventArgs e)2         {3             if (!this.DesignMode)4             {5                 curLen += 10;6                 if (curLen >= this.Width * (1 + barLength)) curLen = 0;7                 this.Refresh();8             }9         }

那个DesignMode就是判断是否在视图设计器上显示,如果不加那个判断,编译控件之后,拉到窗体里面,那Loading的效果也能看出来,这属性找了很久都没找到,感谢匡哥告诉我。其他也没什么好说的,上图上代码

由于是Win8的,看不到什么三维效果了。

1     class LoadingBar:Control 2     { 3  4         private System.Windows.Forms.Timer timer1; 5         private System.ComponentModel.IContainer components; 6  7         private void InitializeComponent() 8         { 9             this.components = new System.ComponentModel.Container();10             this.timer1 = new System.Windows.Forms.Timer(this.components);11             this.SuspendLayout();12             // 13             // timer114             // 15             this.timer1.Enabled = true;16             this.timer1.Tick += new System.EventHandler(this.timer1_Tick);17             this.ResumeLayout(false);18 19             curLen = 0;20             barLength = 0.5f;      21         }22 23         internal float curLen;24         internal float barLength;25 26         public LoadingBar()27         {28             InitializeComponent();29         }30 31         private void timer1_Tick(object sender, EventArgs e)32         {33             if (!this.DesignMode)34             {35                 curLen += 10;36                 if (curLen >= this.Width * (1 + barLength)) curLen = 0;37                 this.Refresh();38             }39         }40 41         protected override void OnPaint(PaintEventArgs e)42         {43             base.OnPaint(e);44 45             Rectangle rec=new Rectangle((int)(curLen - this.Width * barLength), 1, (int)(this.Width * barLength), this.Height - 2);46             if (Application.RenderWithVisualStyles)47             {48                 VisualStyleRenderer glyphRenderer = new VisualStyleRenderer(VisualStyleElement.ProgressBar.Chunk.Normal);49                 glyphRenderer.DrawBackground(e.Graphics, rec);50             }51             else52                 e.Graphics.FillRectangle(Brushes.Green, rec);53 54             e.Graphics.DrawRectangle(Pens.Black, 0, 0, this.Width-1, this.Height-1);55 56 57         }58     }
LoadingBar

 

转载于:https://www.cnblogs.com/HopeGi/p/3369044.html

你可能感兴趣的文章
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>