c#winform小白求助

hxt430 2018-01-22 09:48:37
怎么设置progressbar和timer一起使用在打开那个窗口之后实现该窗口的progressbar在规定的时间里面走完
...全文
429 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxt430 2018-01-22
  • 打赏
  • 举报
回复
我试了,但是进度条没有任何变化啊
  • 打赏
  • 举报
回复
对了Minimum这边有些没对其,反正你也不会动Minimum所以应该没事。
  • 打赏
  • 举报
回复

            System.Threading.Thread t = new System.Threading.Thread(() =>
            {
                int maxtimes = 10;//这里调整多少次完成循环
                for (int i = 0; i < maxtimes + 1; i++)
                {
                    int newvaule = (ProgressBar1.Maximum - ProgressBar1.Minimum) * i / maxtimes;//当前值
                    this.BeginInvoke(new Action(() =>
                    {
                        this.ProgressBar1.Value = newvaule > ProgressBar1.Maximum ? ProgressBar1.Maximum : newvaule;//赋值
                    }));
                    System.Threading.Thread.Sleep(100);//暂停会儿看起来是动画否则一闪完成就没意思了
                }
            });
            t.IsBackground = true;
            t.Start();
你非要嚼碎的我就给你,你能学到啥我也不知道了。
hxt430 2018-01-22
  • 打赏
  • 举报
回复
能具体点么,能有代码实例就更好了,最好有注释,刚开始学
  • 打赏
  • 举报
回复
用 background task -》sleep(100)-》invoke 来做吧。 这些关键词你搜索一下就知道我想让你做什么了。
qq_38230301 2018-01-22
  • 打赏
  • 举报
回复
如果对于线程或者任务不熟悉, 对于委托也不熟悉 建议使用backgroundworker控件来处理类似的问题
hxt430 2018-01-22
  • 打赏
  • 举报
回复
引用 18 楼 xian_wwq 的回复:
如果对于线程或者任务不熟悉, 对于委托也不熟悉 建议使用backgroundworker控件来处理类似的问题
谢谢,我看了xomix给我的代码,读懂之后自己改了,最后成功了,谢谢大家
xian_wwq 2018-01-22
  • 打赏
  • 举报
回复
如果对于线程或者任务不熟悉, 对于委托也不熟悉 建议使用backgroundworker控件来处理类似的问题
hxt430 2018-01-22
  • 打赏
  • 举报
回复
引用 16 楼 xomix 的回复:
这些代码你一行一行看也知道什么意思了,自己写自己的就行了,至于进度条不动我没啥好解决的,还有就是,建议你使用圆圈的loding动画而不是进度条,原因…………这是我的经验,没啥原因。
好的,谢谢了,我试试能不能直接用lable让他每次减1来代表时间好了,帖子我就先放着看看还有没有别人能解决,我希望是进度条毕竟好看点
  • 打赏
  • 举报
回复
这些代码你一行一行看也知道什么意思了,自己写自己的就行了,至于进度条不动我没啥好解决的,还有就是,建议你使用圆圈的loding动画而不是进度条,原因…………这是我的经验,没啥原因。
hxt430 2018-01-22
  • 打赏
  • 举报
回复
引用 13 楼 xomix 的回复:
[quote=引用 12 楼 hxt430 的回复:] [quote=引用 11 楼 hxt430 的回复:] 改了之后是不是 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); 第二句就不用了,因为第二句progressBar1出错了
说是多次定义[/quote] 删除掉窗口本来的进度条看看[/quote] 删了之后能在界面显示进度条,但是不会动
  • 打赏
  • 举报
回复
引用 14 楼 hxt430 的回复:
[quote=引用 13 楼 xomix 的回复:] [quote=引用 12 楼 hxt430 的回复:] [quote=引用 11 楼 hxt430 的回复:] 改了之后是不是 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); 第二句就不用了,因为第二句progressBar1出错了
说是多次定义[/quote] 删除掉窗口本来的进度条看看[/quote] 删了之后能在界面显示进度条,但是不会动[/quote] 还不动?那就是你vs进度条有问题了吧。你用的什么鬼进度条?
hxt430 2018-01-22
  • 打赏
  • 举报
回复
引用 11 楼 hxt430 的回复:
改了之后是不是 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); 第二句就不用了,因为第二句progressBar1出错了
说是多次定义
hxt430 2018-01-22
  • 打赏
  • 举报
回复
改了之后是不是 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); 第二句就不用了,因为第二句progressBar1出错了
  • 打赏
  • 举报
回复
引用 12 楼 hxt430 的回复:
[quote=引用 11 楼 hxt430 的回复:] 改了之后是不是 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); 第二句就不用了,因为第二句progressBar1出错了
说是多次定义[/quote] 删除掉窗口本来的进度条看看
  • 打赏
  • 举报
回复
引用 7 楼 hxt430 的回复:
这就是全部代码,还是实现不了
修改这里:

 private void Dingdan_Load(object sender, EventArgs e)
        {
            ProgressBar progressBar1;
            //注意进度条名称,如果重复了你自己换名称。
            ProgressBar progressBar1;
            //注意进度条名称,如果重复了你自己换名称。 
private void Dingdan_Load(object sender, EventArgs e)
        {
  • 打赏
  • 举报
回复
引用 7 楼 hxt430 的回复:
这就是全部代码,还是实现不了
修改这里:

 private void Dingdan_Load(object sender, EventArgs e)
        {
            ProgressBar progressBar1;
            //注意进度条名称,如果重复了你自己换名称。
            ProgressBar progressBar1;
            //注意进度条名称,如果重复了你自己换名称。 private void Dingdan_Load(object sender, EventArgs e)
        {
  • 打赏
  • 举报
回复
引用 7 楼 hxt430 的回复:
这就是全部代码,还是实现不了
修改这里:

 private void Dingdan_Load(object sender, EventArgs e)
        {
            ProgressBar progressBar1;
            //注意进度条名称,如果重复了你自己换名称。
[code=csharp]            ProgressBar progressBar1;             //注意进度条名称,如果重复了你自己换名称。[/  private void Dingdan_Load(object sender, EventArgs e)         { code]
hxt430 2018-01-22
  • 打赏
  • 举报
回复
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.Data.SqlClient; using System.Threading; namespace HXT智能点餐系统 { public partial class Dingdan : Form { private SqlConnection sqlConn; public Dingdan() { this.sqlConn = HXT智能点餐系统MIS.database.DbConnection.getSqlconn(); InitializeComponent(); } private void btnAdd_Click(object sender, EventArgs e) { this.Close(); Diancan diancan = new Diancan(); diancan.Show(); } private void Dingdan_Load(object sender, EventArgs e) { ProgressBar progressBar1; //注意进度条名称,如果重复了你自己换名称。 Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。 progressBar1 = new ProgressBar(); Controls.Add(progressBar1); System.Threading.Thread t = new System.Threading.Thread(() => { int maxtimes = 100;//这里调整多少次完成循环 for (int i = 0; i < maxtimes + 1; i++) { int newvaule = (progressBar1.Maximum - progressBar1.Minimum) * i / maxtimes;//当前值 this.BeginInvoke(new Action(() => { progressBar1.Value = newvaule > progressBar1.Maximum ? progressBar1.Maximum : newvaule;//赋值 })); System.Threading.Thread.Sleep(100);//暂停会儿看起来是动画否则一闪完成就没意思了 } }); t.IsBackground = true; t.Start(); } } } 这就是全部代码,还是实现不了
  • 打赏
  • 举报
回复
引用 5 楼 hxt430 的回复:
我试了,但是进度条没有任何变化啊
进度条名称对上了吗?进度条本身初始化了吗?进度条…………算了我给你嚼得更碎一些的代码:

        ProgressBar ProgressBar1;//注意进度条名称,如果重复了你自己换名称。
        private void button1_Click(object sender, EventArgs e)//哪个按钮的click事件就放在哪里,什么你没绑定任何事件?那你还是去找老师问问怎么绑定事件吧。
        {
            Controls.Clear();//我清空全部串口控件,然后重新增加进度条到窗体,看他还会不会不变化。
            ProgressBar1 = new ProgressBar();
            Controls.Add(ProgressBar1);
            System.Threading.Thread t = new System.Threading.Thread(() =>
            {
                int maxtimes = 100;//这里调整多少次完成循环
                for (int i = 0; i < maxtimes + 1; i++)
                {
                    int newvaule = (ProgressBar1.Maximum - ProgressBar1.Minimum) * i / maxtimes;//当前值
                    this.BeginInvoke(new Action(() =>
                    {
                        ProgressBar1.Value = newvaule > ProgressBar1.Maximum ? ProgressBar1.Maximum : newvaule;//赋值
                    }));
                    System.Threading.Thread.Sleep(100);//暂停会儿看起来是动画否则一闪完成就没意思了
                }
            });
            t.IsBackground = true;
            t.Start();
        }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧