2014-11-05 54 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