如何制作WinForm中自定义进度条

如何制作WinForm中自定义进度条,第1张

先在窗体上面放置一个DualProgressBar,这个类型的滚动条需要4个Painter去描绘, ,所以可以再分别在窗体上面选择对应类型的Painter,然后分别设置好Painter的属性,主要是颜色类和样式类,有的还涉及到二种颜色,有的样式可以设置为突出或是凹进去或者和窗体平齐

3D效果之类的。其实像这个进度条设置一下MasterValue和Value就可以在设计的时候看出它其实是二个进度条的组合了。这里MasterPainter和ProgressPainter要设置成2个不一样的ProgressPainter,至少要颜色不一样才能看得到是二个在同时滚动嘛。

1)在Form1上布置一个PorgressBar,名称progressBar1

2)在Form1上布置一个Button,名称:button1, Text:导入

3)在Form1上布置一个Button,名称:button2, Text:取消导入

4)在Form1上布置一个BackgroundWorker,名称:backgroundWorker1

5)在Form1上布置一个Label,名称:label1

using System

using System.Collections.Generic

using System.ComponentModel

using System.Data

using System.Drawing

using System.Linq

using System.Text

using System.Windows.Forms

using System.IO

namespace WinFormBackgroundWorker

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent()

            //设置 backgroundWorker1

            //允许报告后台处理进度

            backgroundWorker1.WorkerReportsProgress = true

            //运行取消后台执行

            backgroundWorker1.WorkerSupportsCancellation = true

            //事件

            backgroundWorker1.DoWork += backgroundWorker1_DoWork

            backgroundWorker1.RunWorkerCompleted += 

                backgroundWorker1_RunWorkerCompleted

            backgroundWorker1.ProgressChanged += 

                backgroundWorker1_ProgressChanged

            //progressBar1

            progressBar1.Maximum = 100

            //按钮

            button1.Enabled = true

            button2.Enabled = false

            //lable1

            label1.Text=string.Empty

        }

        void backgroundWorker1_ProgressChanged(object sender, 

            ProgressChangedEventArgs e)

        {

            progressBar1.Value = e.ProgressPercentage

            label1.Text = (string)e.UserState

        }

        void backgroundWorker1_RunWorkerCompleted(object sender, 

            RunWorkerCompletedEventArgs e)

        {

            if (e.Cancelled)

            {

                label1.Text = "任务取消!"

                progressBar1.Value = 0

            }

            else

            {

                label1.Text = "任务完成!"

            }

            button1.Enabled = true

            button2.Enabled = false

        }

        void backgroundWorker1_DoWork(object sender, 

            DoWorkEventArgs e)

        {

            //获取文件夹中文件信息

            string[] files = Directory.GetFiles(@".")

            int i = 0

            foreach (var fs in files)

            {

                // 如果后台 *** 作处理过程中,用户按下取消键

                if (backgroundWorker1.CancellationPending)

                {

                    //停止后台处理

                    e.Cancel = true

                    break

                }

                

                i++

                string msg = "正在处理:" + fs

                backgroundWorker1.ReportProgress(i *100 /files.Length, msg)

                //用一个Sleeep,模拟处理文件的长耗时过程

                System.Threading.Thread.Sleep(2000)

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            button1.Enabled = false

            button2.Enabled = true

            //异步启动后台任务(多线程方式)

            backgroundWorker1.RunWorkerAsync()

        }

        private void button2_Click(object sender, EventArgs e)

        {

            //取消后台 *** 作执行

            backgroundWorker1.CancelAsync()

        }

    }

}

单线程程序: 开始加载datatable数据前创建FrmWait   加载完后关闭。

 //判断是否存在该窗口

  FrmWait newFrmWait = new FrmWait()

 bool IsExist =False

 foreach (Form f in Application.OpenForms)

{

      if (f.GetType() == typeof(FrmWait))

       {

           IsExist =trune

           // 这里添加处理  关闭??

           break

        }

 }

 //如果等待界面不存在  启动等待界面

 if(!IsExist)

 {

    newFrmWait.ShowDialog() 

 }

 

  //这里加载datatable

  foreach (Form f in Application.OpenForms)

{

      if (f.GetType() == typeof(FrmWait))

       {

        //关闭等待界面

           f.Close()

          

           break

        }

 }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11953650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存