Winforms 文本框不会更新
因此,我正在制作一个基本的yahtzee程序i c#,我试图制作一个实际的gui,而不仅仅是使用控制台。但是,我对文本框有一个问题。当我掷骰子时,我希望文本框显示掷骰子的数字。现在什么也看不出来了。我使用两个类,一个用于实际程序,另一个用于处理gui。这是yahtzee类: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
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中的按键应该做什么吗?请举个例子