2014-11-05 41 views
0

我有两个班,Form1.cssecondclass.cs,我试图做secondclass.cs东西,送的进展上Form1.cs一个进度条,这是我当前的代码:通过次级类访问进度条

Form1.cs

namespace DifferentClasses 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      secondclass.updateBar(20); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      this.setBar(20); 
     } 

     public void setBar(int percentage) 
     { 
      this.progressBar1.Value += percentage; 
      Console.WriteLine(Convert.ToString(percentage)); 
     } 
    } 
} 

secondclass.cs

namespace DifferentClasses 
{ 
    class secondclass 
    { 
     public static void updateBar(int percentage) 
     { 
      var frm = new Form1(); 
      frm.setBar(percentage); 
     } 
    } 
} 

(这是一个新的项目,以测试我在主程序中实际需要的) 如你所见,我已经创建了2个按钮,第一个通过secondclass.cs 运行命令,第二个直接从同一个类运行它。有趣的是,不要给出错误 并都返回控制台行,但第一个按钮实际上并没有改变进度条,我不知道为什么。

+0

你可以尝试在设置值 – Nunners 2014-11-05 09:54:25

+0

之后添加'this.progressBar1.Refresh();'否仍然没有任何@Nunners :(尽管好,编辑:我不知道如果我是doi恩也好,很新的C#嘿嘿 – Azrael 2014-11-05 09:59:17

回答

2

问题是在updateBar中你正在创建一个新的Form1并设置其百分比。 解决这个最简单的方法是,以当前的形式引用传递到updateBar这样的:

public static void updateBar(int percentage,Form1 f) 
{ 
    f.setBar(percentage); 
} 

,并在调用代码做到这一点:

secondclass.updateBar(20,this); 

我猜二等会最终运行一些可能需要一些时间的东西,所以你可能想看看C#中的异步功能。

+1

打我吧! :) – Nunners 2014-11-05 10:04:34

+0

您先生配得上勋章!,它的工作原理 – Azrael 2014-11-05 10:05:10

+0

这种方式我甚至不需要setBar()函数,如果我将它设置为public,我也可以直接访问吧:D – Azrael 2014-11-05 10:41:14