有些时候我们做的程序需要进度条,而vs提供的控件不是我们想要的。先看效果图:
进度条闪烁动画,当然背景可设为Transparent
之前想手绘进度条线条的,结果控件运行时会闪烁,所以直接用了panel控件
源码:
[DefaultEvent("ProgressClick")]
[ToolboxBitmap(typeof(TrackBar))]
public partial class ProcessBar : UserControl
{
public ProcessBar()
{
//InitializeComponent();
//this.SetStyle(ControlStyles.UserPaint, true);
//this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
//this.SetStyle(ControlStyles.DoubleBuffer, true);
}
private int locationX=0;
[Description("单击时X的坐标")]
public int LocationX
{
get { return locationX; }
}
private int current = 0;
[Description("当前进度")]
public int Current
{
get { return current; }
set
{
if (value > 232 || value < 0)
return;
current = value;
panelCurrent.Size = new Size(value, 1);
picture.Location = new Point(value - 4, -3);
Invalidate();
}
}
private bool isPlay = false;
[Description("是否播放")]
public bool IsPlay
{
get { return isPlay; }
set { isPlay = value; tmrCurrent.Enabled = isPlay; Invalidate(); }
}
public delegate void MouseHandle(object sender,EventArgs e);
[Description("点下鼠标")]
public event MouseHandle BarMouseDown;
int picturetype = 0;
private void tmrCurrent_Tick(object sender, EventArgs e)
{
if (picturetype == 0)
{ picture.Image = Properties.Resources.play_slider_thumb; picturetype = 1; }
else
{ picture.Image = Properties.Resources.play_slider_thumb_animate; picturetype = 0; }
GraphicsPath g = subGraphicsPath(picture.Image);
if (g == null) return;
picture.Region = new Region(g);
}
private unsafe static GraphicsPath subGraphicsPath(Image img)
{
if (img == null) return null;
// 建立GraphicsPath, 给我们的位图路径计算使用
GraphicsPath g = new GraphicsPath(FillMode.Alternate);
Bitmap bitmap = new Bitmap(img);
int width = bitmap.Width;
int height = bitmap.Height;
BitmapData bmData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte* p = (byte*)bmData.Scan0;
int offset = bmData.Stride - width * 3;
int p0, p1, p2; // 记录左上角0,0座标的颜色值
p0 = p[0];
p1 = p[1];
p2 = p[2];
int start = -1;
// 行座标 ( Y col )
for (int Y = 0; Y < height; Y++)
{
// 列座标 ( X row )
for (int X = 0; X < width; X++)
{
if (start == -1 && (p[0] != p0 || p[1] != p1 || p[2] != p2)) //如果 之前的点没有不透明 且 不透明
{
start = X; //记录这个点
}
else if (start > -1 && (p[0] == p0 && p[1] == p1 && p[2] == p2)) //如果 之前的点是不透明 且 透明
{
g.AddRectangle(new Rectangle(start, Y, X - start, 1)); //添加之前的矩形到
start = -1;
}
if (X == width - 1 && start > -1) //如果 之前的点是不透明 且 是最后一个点
{
g.AddRectangle(new Rectangle(start, Y, X - start + 1, 1)); //添加之前的矩形到
start = -1;
}
p += 3; //下一个内存地址
}
p += offset;
} bitmap.UnlockBits(bmData);
bitmap.Dispose();
// 返回计算出来的不透明图片路径
return g;
}
private void panelTotal_MouseDown(object sender, MouseEventArgs e)
{
Current = e.Location.X;
locationX = e.Location.X;
if (BarMouseDown != null)
{
BarMouseDown.Invoke(sender, e);
}
}
private void panelCurrent_MouseDown(object sender, MouseEventArgs e)
{
Current = e.Location.X;
locationX = e.Location.X;
if (BarMouseDown != null)
{
BarMouseDown.Invoke(sender, e);
}
}
}
用到的素材:
直接右键另存为图片,之所以用黑色背景是因为图片是白色的看不见,不用多说了。
提示:这里用到了unsafe关键字,需要设置项目的属性-----允许运行不安全的代码,没有设置的同学不要以为程序错了
# C#
# 进度条
# c# 实现圆形的进度条(ProgressBar)
# C#实现炫酷启动图-动态进度条效果
# C# Oracle批量插入数据进度条的实现代码
# C#实现带百分比的进度条功能示例
# C#实现带进度条的ListView
# C# Winform下载文件并显示进度条的实现代码
# c#根据文件大小显示文件复制进度条实例
# c#进度条 progressBar 使用方法的小例子
# C#中常使用进度条的代码
# Winform 实现进度条弹窗和任务控制
# C#使用winform实现进度条效果
# 不透明
# 是因为
# 鼠标
# 设为
# 给我们
# 右键
# 错了
# 用了
# 多说
# 另存为
# 手绘
# 不安全
# 先看
# 单击
# 不要以为
# Current
相关文章:
怀化网站制作公司,怀化新生儿上户网上办理流程?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何通过WDCP绑定主域名及创建子域名站点?
如何快速搭建高效WAP手机网站吸引移动用户?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
利用JavaScript实现拖拽改变元素大小
定制建站流程步骤详解:一站式方案设计与开发指南
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何快速生成专业多端适配建站电话?
javascript基本数据类型及类型检测常用方法小结
独立制作一个网站多少钱,建立网站需要花多少钱?
如何用美橙互联一键搭建多站合一网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
已有域名和空间如何搭建网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
学校为何禁止电信移动建设网站?
教学网站制作软件,学习*后期制作的网站有哪些?
ppt制作免费网站有哪些,ppt模板免费下载网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
常州自助建站工具推荐:低成本搭建与模板选择技巧
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在Windows 2008云服务器安全搭建网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站主机选择指南:服务器配置与SEO优化实战技巧
如何选择适合PHP云建站的开源框架?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
成都网站制作报价公司,成都工业用气开户费用?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
制作宣传网站的软件,小红书可以宣传网站吗?
如何通过网站建站时间优化SEO与用户体验?
建站之星好吗?新手能否轻松上手建站?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站之星如何保障用户数据免受黑客入侵?
如何通过FTP空间快速搭建安全高效网站?
5种Android数据存储方式汇总
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
网站制作服务平台,有什么网站可以发布本地服务信息?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
c# await 一个已经完成的Task会发生什么
如何设置并定期更换建站之星安全管理员密码?
如何使用Golang安装API文档生成工具_快速生成接口文档
建站之星CMS五站合一模板配置与SEO优化指南
如何在新浪SAE免费搭建个人博客?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
网页设计网站制作软件,microsoft office哪个可以创建网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。