【问题标题】:Windows forms different classes, trying to change textbox.textWindows形成不同的类,试图改变textbox.text
【发布时间】:2012-11-01 15:37:31
【问题描述】:

我正在尝试创建一个从我的设置文件中获取数据的函数(HighscoreSaved 被放入 highscoreList 数组中),然后加入字符串并将它们写入文本框(highScore.Text)

但是当我调用该函数时没有任何反应

这是我的代码: 表格1

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);
        }

【问题讨论】:

    标签: c# .net arrays forms class


    【解决方案1】:

    您正在 Set 方法中创建 Form1 的新实例,这就是您没有看到变化的原因。您应该将 Form 的一个实例传递给该方法。

    类似(在你的班级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】:

      更好的方法是一次性完成所有这些。

      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);     
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        相关资源
        最近更新 更多