winform中自带的进度条控件ProgressBar,在实际使用过程中,可能会遇到UI动画显示延迟的现象,进度已经走完,但是进度条可能才显示到一半,尤其是在一些弹出窗体中,点击确定开始执行后台操作,同时进度条显示进度,后台执行完成且成功,窗体关闭,此时UI画面的现象就是进度条才进行到一半或者70%,窗体关闭了。针对这一问题,我们可以使用自定义控件来解决,其实也就是继承自带的进度条控件,然后重写OnPoint函数。
首先,打开解决方案,在项目中添加用户控件
在类代码中继承ProgressBar,然后将OnPoint函数重写完成之后重新生成一下,就可以在工具箱中找到自定义的控件进行使用。
public partial class CustomPro : ProgressBar { public CustomPro() { base.SetStyle(ControlStyles.UserPaint, true); } protected override void OnPaint(PaintEventArgs e) { SolidBrush brush = null; Rectangle bounds = new Rectangle(0, 0, base.Width, base.Height); bounds.Height -= 4; bounds.Width = ((int)(bounds.Width * (((double)base.Value) / ((double)base.Maximum)))) - 4; brush = new SolidBrush(Color.DeepSkyBlue); e.Graphics.FillRectangle(brush, 2, 2, bounds.Width, bounds.Height); } }
如果重新生成之后在工具箱没有找到,不要慌,可能是你的VS设置导致。点击 工具 -- 选项 -- Windows窗体设计器 -- 常规 -- 工具箱 -- 自动填充工具箱,将这个选项设置为true,然后重新生成,工具箱里就会有刚刚写好的自定义控件。
此时还是会有一些小问题,当你只进行项目清理而不重新生成时,使用自定义控件的窗体的设计页面会报错,报错信息的意思是未能找到自定义的控件。这里是不影响编译的,因为只要重新生成项目,这个报错就会解决。其他解决方式是将自定义控件封装在DLL中,然后在项目中引用DLL,这样就不会出现这种问题。