举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > c#进度条是哪个控件 c#进度条实现方法

c#进度条是哪个控件 c#进度条实现方法

2023-02-28 06:18 C#教程

c#进度条是哪个控件 c#进度条实现方法

c#进度条是哪个控件

C#进度条是一种用于显示任务完成进度的控件,它可以帮助用户更好地理解任务的执行情况。C#进度条可以使用ProgressBar控件来实现,它是.NET Framework中的一个类,位于System.Windows.Forms命名空间中。

ProgressBar控件有两种样式:水平和垂直。默认情况下,ProgressBar控件的样式是水平的,但可以通过设置Orientation属性来改变其样式。此外,ProgressBar控件也有一些其它属性,如Minimum、Maximum、Step、Value和Style。

Minimum属性表示进度条的最小值(默认为0);Maximum属性表示进度条的最大值(默认为100);Step表示在Value上加1时要递增多少;Value表示当前进度条的当前位置;Style表示进度条的样式。

// 这是一个例子 
// 初始化 ProgressBar 控件 
ProgressBar progressBar1 = new ProgressBar(); 
progressBar1.Minimum = 0; 
progressBar1.Maximum = 100; 
progressBar1.Step = 1; 
progressBar1.Value = 0; 
progressBar1.Style = ProgressBarStyle.Continuous;

c#进度条实现方法

在我们使用c#做WinFrom开发时,经常会用到进度条(ProgressBar)。那么如何才能实现winfrom进度条及进度信息提示呢?


方法一:多线程

C#多线程教程

使用c#做WinFrom开发,要实现进度条效果就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息)。

1、设计界面

需要引用 using System.Threading;

1

控件名称分别为:progressBar1label1textBox1button1

2、定义一个代理

代理用于更新ProgressBar的值(Value)及在执行方法的时候,返回方法的处理信息。

private delegate void SetPos(int ipos,string vinfo);//代理

3、设置进度条更新函数

进度条值更新函数(参数必须跟声明的代理参数一样)

private void SetTextMesssage(int ipos,string vinfo){
    if (this.InvokeRequired){
        SetPos setpos = new SetPos(SetTextMesssage);
        this.Invoke(setpos, new object[] { ipos,vinfo });
    }
    else{
        this.label1.Text = ipos.ToString() + "/1000";
        this.progressBar1.Value = Convert.ToInt32(ipos);
        this.textBox1.AppendText(vinfo);
    }
}

4、函数实现

private void button1_Click(object sender, EventArgs e){
    Thread fThread = new Thread(new ThreadStart(SleepT));
    fThread.Start();
}

5、新的线程执行函数:

private void SleepT(){
    for (int i = 0; i < 500; i++){
        System.Threading.Thread.Sleep(10);
        SetTextMesssage(100*i/500,i.ToString()+"rn");
    }
}

程序运行效果图:

2



方法二:通过控件backgroundWorker1实现

1、主窗体设计:

3

控件名称:button1;backgroundWorker1;

对backgroundWorker1控件,属性设置:

4

2、主页面后台代码:

using System.Threading;//引用空间名称
private void button1_Click(object sender, EventArgs e){
    this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件
    ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
    form.ShowDialog(this);
    form.Close();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){
    if (e.Error != null){
        MessageBox.Show(e.Error.Message);
    }
    else if (e.Cancelled){
    }
    else{
    }
}

//你可以在这个方法内,实现你的调用,方法等。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){
    BackgroundWorker worker = sender as BackgroundWorker;
    for (int i = 0; i < 100; i++){
        Thread.Sleep(100);
        worker.ReportProgress(i);
        if (worker.CancellationPending){  // 如果用户取消则跳出处理数据代码             e.Cancel = true;
            break;
        }
    }
}

分别为button控件和backgroundWorker1控件选好事件。

3、设置子窗体(及显示进度条的窗体):

5

控件名称:progressBar1;button1

4、子窗体

后台代码:

private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)

public ProcessForm(BackgroundWorker backgroundWorker1){
    InitializeComponent();
    this.backgroundWorker1 = backgroundWorker1;
    this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
    this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){
    //this.Close();//执行完之后,直接关闭页面
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e){
    this.progressBar1.Value = e.ProgressPercentage;
}
private void button1_Click(object sender, EventArgs e){
    this.backgroundWorker1.CancelAsync();
    this.button1.Enabled = false;
    this.Close();
}

只为button选好事件

执行效果为:

c#进度条实现方法

以上就是C#实现winfrom进度条及进度信息提示的方法介绍,希望对大家有所帮助。


阅读全文
以上是编程学为你收集整理的c#进度条是哪个控件 c#进度条实现方法全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部