关于progressbar

 

private void btnStart_Click(object sender, EventArgs e)
        {
          pbrProgress.Maximum = 100;//设置最大长度值           
            this.Cursor = Cursors.WaitCursor;
            ///添加一个事件处理程序   
            backgroundWorker1.DoWork += new DoWorkEventHandler(DoWork);
           ///添加一个显示进度条的事件   
            this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(ProgressChanged); //ProgressChanged 是显示进度条Method   
            ///后台已操作完成,关闭窗体   
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CloseForm); // CloseForm()调用关闭窗体   
            ///开始执行后台操作   
            this.backgroundWorker1.RunWorkerAsync(filename);
        }
            private void DoWork(object sender , DoWorkEventArgs e)   
            {   
                e.Result = (WorkTimer(this.backgroundWorker1,e));   
            } 
            /// <summary>   
        /// 设置进度条显示长度   
          /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
       
        private int WorkTimer(object sender, DoWorkEventArgs e)  //此为自己的操作处理函数,切记!! 
        {
            int max = pbrProgress.Maximum;
            int percent = 0;

            for (int i = 0; i <= max; i++)   
            {   
                if (this.backgroundWorker1.CancellationPending)   
                {   
                    e.Cancel = true;   
                    return -1;   
                }   
                else 
                {   
                    //自己的函数处理计算过程
                      ......  


                    percent = (int)(((double)i / (double)max) * 100);
                    this.backgroundWorker1.ReportProgress(percent);   //单次循环处理完报告进度,触发ProgressChanged事件                
                }   
                ///   将当前线程挂起指定的时间   
                System.Threading.Thread.Sleep(100);   
            }   
            return -1;   
        }   
        //显示进度条
        public void ProgressChanged(object sender, ProgressChangedEventArgs e)   
        {   
            this.pbrProgress.Style = ProgressBarStyle.Continuous;   
            this.lblMsg.Text=string.Format("已完成{0}%,请稍候...", e.ProgressPercentage);
            this.pbrProgress.Value = e.ProgressPercentage;   
        }   
         /// <summary>   
        /// 关闭进度条显示窗体   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        public void CloseForm(object sender, RunWorkerCompletedEventArgs e)   
        {   
            this.Close();   
        }

  

Reference:http://blog.csdn.net/x415831943/article/details/7795761

http://www.cnblogs.com/xuqiang/archive/2010/03/29/1953690.html

 

另外关于如何在ProgressBar 添加文字

虽然ToolStripProgressBar.Text 屬性和ProgressBar.Text属性均存在,但不可用,“此 API 支持 .NET Framework 基础结构,不适合在代码中直接使用。”具体参考http://msdn.microsoft.com/zh-cn/library/vstudio/6fetw5dd(v=vs.90).aspx

以下为解决方法:

private void pbPrecentage(ToolStripProgressBar pb)
{
    int percent = (int)(((double)(pb.Value - pb.Minimum) /
    (double)(pb.Maximum - pb.Minimum)) * 100);

    using (Graphics gr = pb.ProgressBar.CreateGraphics())
    {
        //Switch to Antialiased drawing for better (smoother) graphic results
        gr.SmoothingMode = SmoothingMode.AntiAlias;
        gr.DrawString(percent.ToString() + "%",
            SystemFonts.DefaultFont,
            Brushes.Black,
            new PointF(pb.Width / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Width / 2.0F),
            pb.Height / 2 - (gr.MeasureString(percent.ToString() + "%",
                SystemFonts.DefaultFont).Height / 2.0F)));
    }
}

  //Activate Double Buffering for all kind of drawing within your form
this.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.DoubleBuffer,true);

以上用于窗体设置,如不设置类型则progressbar无text
Reference:http://stackoverflow.com/questions/7708904/adding-text-to-the-tool-strip-progress-bar

posted on 2013-03-18 17:34  Daywei  阅读(353)  评论(0编辑  收藏  举报

导航

技术追求卓越 梦想创造未来