进度条(ProgressBar)控件使用时UI画面显示延迟的解决

  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,这样就不会出现这种问题。

 

posted @ 2019-11-11 20:41  冬天从来不怕冷  阅读(1508)  评论(0编辑  收藏  举报