2012-11-13 50 views
5

我試圖做一個函數,從我的設置文件(HighscoreSaved至高斯列表數組)放入數據,然後加入字符串並將它們寫入文本框(highScore 。文本)Windows窗體形式不同的類,試圖改變textbox.text

然而,當我呼籲函數沒有任何反應

因此,這裏是我的代碼: Form1中

private void button4_Click_1(object sender, EventArgs e) 
    { 
     Highscore.Fetch(); 
     Highscore.Set(); 
    } 

    public void highscoreText (string value) 
    { 
      this.highScore.Text = value; 
    } 

而且繼承人應該被稱爲由Highscore.Fetch類多數民衆贊成() ,和Highscore.Set( ) 但是,當我呼籲他們沒有在我的文本框

public static class Highscore 
    { 
     public static void Fetch() 
     { 
      Form1.highscoreList[0] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper1 + "\t\t" + HighscoreSaved.Default.highscoreScore1; 
      Form1.highscoreList[1] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper2 + "\t\t" + HighscoreSaved.Default.highscoreScore2; 
      Form1.highscoreList[2] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper3 + "\t\t" + HighscoreSaved.Default.highscoreScore3; 
      Form1.highscoreList[3] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper4 + "\t\t" + HighscoreSaved.Default.highscoreScore4; 
      Form1.highscoreList[4] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper5 + "\t\t" + HighscoreSaved.Default.highscoreScore5; 
      Form1.highscoreList[5] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper6 + "\t\t" + HighscoreSaved.Default.highscoreScore6; 
      Form1.highscoreList[6] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper7 + "\t\t" + HighscoreSaved.Default.highscoreScore7; 
      Form1.highscoreList[7] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper8 + "\t\t" + HighscoreSaved.Default.highscoreScore8; 
      Form1.highscoreList[8] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper9 + "\t\t" + HighscoreSaved.Default.highscoreScore9; 
      Form1.highscoreList[9] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper10 + "\t\t" + HighscoreSaved.Default.highscoreScore10; 

      Form1.highscoreInt[0] = HighscoreSaved.Default.highscoreScore1; 
      Form1.highscoreInt[1] = HighscoreSaved.Default.highscoreScore2; 
      Form1.highscoreInt[2] = HighscoreSaved.Default.highscoreScore3; 
      Form1.highscoreInt[3] = HighscoreSaved.Default.highscoreScore4; 
      Form1.highscoreInt[4] = HighscoreSaved.Default.highscoreScore5; 
      Form1.highscoreInt[5] = HighscoreSaved.Default.highscoreScore6; 
      Form1.highscoreInt[6] = HighscoreSaved.Default.highscoreScore7; 
      Form1.highscoreInt[7] = HighscoreSaved.Default.highscoreScore8; 
      Form1.highscoreInt[8] = HighscoreSaved.Default.highscoreScore9; 
      Form1.highscoreInt[9] = HighscoreSaved.Default.highscoreScore10; 

      Form1.highscoreKeeper[0] = HighscoreSaved.Default.highscoreKeeper1; 
      Form1.highscoreKeeper[1] = HighscoreSaved.Default.highscoreKeeper2; 
      Form1.highscoreKeeper[2] = HighscoreSaved.Default.highscoreKeeper3; 
      Form1.highscoreKeeper[3] = HighscoreSaved.Default.highscoreKeeper4; 
      Form1.highscoreKeeper[4] = HighscoreSaved.Default.highscoreKeeper5; 
      Form1.highscoreKeeper[5] = HighscoreSaved.Default.highscoreKeeper6; 
      Form1.highscoreKeeper[6] = HighscoreSaved.Default.highscoreKeeper7; 
      Form1.highscoreKeeper[7] = HighscoreSaved.Default.highscoreKeeper8; 
      Form1.highscoreKeeper[8] = HighscoreSaved.Default.highscoreKeeper9; 
      Form1.highscoreKeeper[9] = HighscoreSaved.Default.highscoreKeeper10;     
     } 
     public static void Set() 
     { 
      Form1 mainForm = new Form1(); 
      string[] highscoreImported = new string[10]; 
      Array.Copy(Form1.highscoreList, highscoreImported, 10); 
      string highscores = string.Join("\n", highscoreImported); 
      mainForm.highscoreText(highscores); 
     } 

回答

8

你創建你Set方法Form1的新實例的變化,這就是爲什麼你看不到的變化。您應該將該表單的實例傳遞給該方法。

喜歡的東西(在你的類Highscore):

public static void Set(Form mainForm) 
{ 
    string[] highscoreImported = new string[10]; 
    Array.Copy(Form1.highscoreList, highscoreImported, 10); 
    string highscores = string.Join("\n", highscoreImported); 
    mainForm.highscoreText(highscores); 
} 

稍後,您可以把它想:

private void button4_Click_1(object sender, EventArgs e) 
{ 
    Highscore.Fetch(); 
    Highscore.Set(this); //notice "this" 
} 
+2

YE這似乎工作,謝謝 –

1

一個更好的辦法是做所有這些一氣呵成。

using System.Linq; 

public static void FetchAndSet() 
{ 
    Form1.highscoreList[0] = "\t\t\t" + HighscoreSaved.Default.highscoreKeeper1; 
    . 
    . 

    Form1.highscoreInt[0] = HighscoreSaved.Default.highscoreScore1; 
    . 
    . 

    Form1.highscoreKeeper[0] = HighscoreSaved.Default.highscoreKeeper1; 
    . 
    . 

    //Use LINQ's Take to Pull out the Top 10. 
    string highscores = string.Join("\n", highscoreList.Take(10)); 
    this.highscoreText(highscores);  
}