2015-12-04 80 views
2

我試圖創建類來幫助更好地組織我的代碼,而不是使用巨大的不同函數的字符串,我的表單加載時調用函數,但實際上並沒有將更新應用到標籤(標籤仍然讀取label1) 我的類別代碼被更新標籤上的文字

namespace WindowsFormsApplication1 
{ 
    class DynamicDisplayHandler 
    { 


     public void LoadLastServer() 
     { 
      Form1 homepage = new Form1(); 
      MessageBox.Show("Loaded Class"); 

      if (File.Exists("./WTF/Config.wtf")) 
      { 
       int counter = 0; 
       string line; 


       System.IO.StreamReader file = new System.IO.StreamReader("./WTF/Config.wtf"); 
       while ((line = file.ReadLine()) != null) 
       { 
        if (line.Contains("SET realmName")) 
        { 

         string converted = line.Replace("SET realmName", ""); 
         string finalized = converted.Replace("\"", ""); 

         homepage.lastServer.Text = finalized; 
        } 
        else 
        { 

         homepage.lastServer.Text = "Never Connected"; 
        } 

        counter++; 
       } 

       file.Close(); 
      } 
      else 
      { 

       homepage.lastServer.Text = ""; 
      } 

     } 
    } 
} 

現在對於我的實際Form1文件的代碼,我有

namespace WindowsFormsApplication1 
{ 

    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     } 
     public void Form1_Load(object sender, EventArgs e) 
     { 
      DynamicDisplayHandler displayHandler = new DynamicDisplayHandler(); 
      displayHandler.LoadLastServer(); 
     } 
    } 
} 

回答

2

只要你在做LastLoadServer()Form1 homepage = new Form1();,你是我麻煩。剛剛創建的新窗體與調用該方法的原始窗體無關。

,而不是在傳遞一個參考:

public void LoadLastServer(Form1 homepage) 
{ 
    ... 
} 

並據此稱之爲:

displayHandler.LoadLastServer(this); 
+0

你很快就讀到了這個問題;) –

+0

@Reza它只是點擊很快。在C#中,人們通常會在創建新實例時想要傳遞引用。 –

+0

是的,至少在最後一天,這是我見過的第二個有這樣的錯誤的問題。 –

1

因爲在類Form實例是不是你看到的情況下,你是新的。像這樣糾正它,通過構造函數傳遞實例。

class DynamicDisplayHandler 
{ 
    public void LoadLastServer(Form1 f1) 
    { 
     Form1 homepage = f1; 
    } 
} 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     DynamicDisplayHandler displayHandler = new DynamicDisplayHandler(); 
     displayHandler.LoadLastServer(this); // 
    } 
}