我有一个进度条,其编码如下。我从网上找到这个代码。当我点击一个按钮时,我真的想做这个按钮做一些过程我算一下。我可以理解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);
}
}
}
答案 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);