Winforms 文本框不会更新

Winforms 文本框不会更新,winforms,user-interface,textbox,Winforms,User Interface,Textbox,因此,我正在制作一个基本的yahtzee程序i c#,我试图制作一个实际的gui,而不仅仅是使用控制台。但是,我对文本框有一个问题。当我掷骰子时,我希望文本框显示掷骰子的数字。现在什么也看不出来了。我使用两个类,一个用于实际程序,另一个用于处理gui。这是yahtzee类: using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Wi

因此,我正在制作一个基本的yahtzee程序i c#,我试图制作一个实际的gui,而不仅仅是使用控制台。但是,我对文本框有一个问题。当我掷骰子时,我希望文本框显示掷骰子的数字。现在什么也看不出来了。我使用两个类,一个用于实际程序,另一个用于处理gui。这是yahtzee类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Yahtzee
{
    class YahtzeeScorer {
        Random rndm = new Random();
        Form1 gui = new Form1();
        String dice1, dice2, dice3, dice4, dice5;

       public void rollDice()
        {
            String a = Console.ReadLine();
            this.dice1 = rndm.Next(1, 7).ToString();
            this.gui.tbDice_SetText(this.dice1);
        }

        static void Main(String[] args) {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            YahtzeeScorer ys = new YahtzeeScorer();
            Application.Run(ys.gui);
            ys.rollDice();
            Console.WriteLine("The result was: " + ys.dice1 );
            Console.Read();
        }

    }
}
这是gui类form1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        public void tbDice_SetText(String s)
        {
            //this.ActiveControl = tbDice;
            Console.WriteLine("SetText");
            tbDice.Text = s;
        }

        public void textBox1_TextChanged(object sender, EventArgs e)
        {

        }



    }
}
tbDice是textbox组件的名称。有什么想法吗?

检查这些行:

Application.Run(ys.gui);
ys.rollDice();
rollDice()
在应用程序退出之前不会被调用,因为运行
Main()
的线程将阻塞
application.Run()
直到它退出为止

相反,尝试在按钮事件处理程序中调用
ys.rollDice()

更新

通过将两个方面都放在YahtzeeScorer中,您正在混合您的游戏逻辑和表示逻辑。我建议您将游戏逻辑移动到一个单独的类中,如下所示:

public class YahtzeeGame
{
     public string rollDice()
     {
        return rndm.Next(1, 7).ToString();
     }    
}


public partial class Form1 : Form
{
    YahtzeeGame game = new YahtzeeGame();

    public Form1()
    {
        InitializeComponent();
    }

    // You need to create a new Button on your form called btnRoll and 
    // add this as its click handler:
    public void btnRoll_Clicked(object sender, EventArgs e)
    {
        tbDice.Text = game.rollDice();
    }
}

所以我想我不能在form1中创建YahtzeeScorer的实例,我可以从YahtzeeScorer调用buttonpress操作吗?我可以在YS中决定form1中的按键应该做什么吗?请举个例子