如何将Winform的Progress Bar更改与其他功能相关联

时间:2014-03-12 15:32:38

标签: c# winforms progress-bar

我有一个进度条,其编码如下。我从网上找到这个代码。当我点击一个按钮时,我真的想做这个按钮做一些过程我算一下。我可以理解ReadExistingExcel fucnc这有什么变化吗?这个函数在其他类中,这个函数中有很多循环

 public partial class Form1 : Form
    {

        public Form1()
        {
                InitializeComponent();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {

            Class1 yeni = new Class1();
            yeni.Update();
        }

        public  void  UpdateMyProgressBar(int i)
        {
            progressBar1.Value=i;
            backgroundWorker1.ReportProgress(i);

        }



        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            this.Text = e.ProgressPercentage.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

    }

其他班级

 public class Class1
    {
        public void Update()
        {
            for (int i = 0; i < 100; i++)
            {
                Form1 ins = new Form1();
                ins.UpdateMyProgressBar(i); 
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

当您的代码立即生效时,Form1类会创建Class1的新实例,然后在Update方法内创建100个Form1的新实例。它没有获得对现有表单的引用。这就是你的问题。

尝试更改Class1代码,如下所示:

public class Class1
{
    public Class1(Form1 form1)
    {
        _form1 = form1;
    }

    private Form1 _form1;

    public void Update()
    {
        for (int i = 0; i < 100; i++)
        {
            _form1.UpdateMyProgressBar(i); 
        }
    }
}

然后像这样更改Form1

   private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
   {
       Class1 yeni = new Class1(this);
       yeni.Update();
   }

   public  void  UpdateMyProgressBar(int i)
   {
       backgroundWorker1.ReportProgress(i);
   }

答案 1 :(得分:0)

听起来你只需要公开无效来更新进度条值。

public void UpdateProgressBar(int val)
{
   progressBar1.Value = val;
}

然后可以通过引用当前的类从其他类调用它。 因此,如果您当前的类被称为Class1,并且您想要从Class10调用它,那么您只需要执行     Class1.UpdateProgressBar(10);