class2
{
public void ExecuteAll(int rowStart,int columnStart,int rowEnd,int columnEnd)
{
ChessBoard chess = new ChessBoard();
chess.YourTurn();
counter++;
}
}
public static int counter;
我有这个代码,我想打印哪些玩家把它变成棋盘。计数器是一个静态int,每次执行时,计数器都会增加1。
YourTurn是名为ChessBoard的分部类中的一种方法。它看起来像这样:
public void YourTurn()
{
if (Class2.counter % 2 == 0)// if counter is an equal number
{
PlayerA.Text = "Black turn";// PlayerA label
PlayerA.Text = "White inactive";
}
else
{
PlayerB.Text = "White turn";// PlayerB label
PlayerB.Text = "Black inactive";
}
}
什么不会发生,是标签的更新,每次我移动。那是为什么?
即使这样的设计也不会起作用,这意味着,不是因为每次都创建了一个新的实例。
public static string whitesTurn = "White turn";
public static string blacksTurn = "Black turn";
public void YourTurn()
{
if (Class2.counter % 2 == 0)
{
PlayerA.Text = blacksTurn;
PlayerA.Text = "White inactive";
PlayerA.Invalidate();
}
else
{
PlayerB.Text = whitesTurn;
PlayerB.Text = "Black inactive";
PlayerA.Invalidate();
}
}
答案 0 :(得分:1)
调试代码,看看你提到的所有函数是否都被调用。
查看您是否尝试更新非UI线程中的值。
答案 1 :(得分:1)
使控件无效肯定会有所帮助,但我并不是100%肯定你正在更新同一个类的实例。
更好的设计是将两个字符串值保留在您更新的ChessBoard类(可能是PlayerAText
和PlayerBText
)中。
然后,假设class1
是你的WinForm,你可以添加几个部分:
class2
{
public void ExecuteAll(int rowStart,int columnStart,int rowEnd,int columnEnd)
{
ChessBoard chess = new ChessBoard();
chess.YourTurn();
counter++;
PlayerA.Text = chess.PlayerAText;
PlayerA.Text = chess.PlayerBText;
}
}
public static int counter;
答案 2 :(得分:0)
PlayerA和PlayerB有哪些控制?如果它们是System.Windows.Forms.Label控件,请在设置文本后尝试调用Invalidate():
PlayerA.Text = "Black turn";
PlayerA.Invalidate();
这将强制重绘标签。
答案 3 :(得分:0)
你没有有效地改变任何事情
if (Class2.counter % 2 == 0)// if counter is an equal number
{
PlayerA.Text = "Black turn";// PlayerA label
PlayerA.Text = "White inactive";
}
else
{
PlayerB.Text = "White turn";// PlayerB label
PlayerB.Text = "Black inactive";
}
PlayerA.Text将始终为“白色无效”,而PlayerB.Text将为“黑色无效”
我认为以下内容将解决您的问题
if (Class2.counter % 2 == 0)// if counter is an equal number
{
PlayerA.Text = "Black turn";// PlayerA label
PlayerB.Text = "White inactive";
}
else
{
PlayerB.Text = "White turn";// PlayerB label
PlayerA.Text = "Black inactive";
}
你应该在if和else两个块中更改标签A和B