我知道这有效,但除此之外还有更好的方法吗?
Button clicked = (Button)sender;
if (turn)
{
clicked.Text = player;
}
else {
clicked.Text = cpu;
}
turn = !turn;
答案 0 :(得分:6)
单击按钮时,将执行click事件处理程序。这会调用您的tictactoe
功能。在那里,您的代码从上到下执行,首先检查数组中第一个按钮的.Text
并进行调整。然后你的If..Else块结束。在下一次单击时重复此操作。这导致了这种行为。
相反,您应该将sender
对象转换为Button
,并且只对此有效。不需要整个If..Else
块。 Sender
是引发事件的对象(此处:单击的按钮)。
public void tictactoe(object sender, EventArgs e)
{
Button b = (Button)sender;
if (string.IsNullOrEmpty(b.Text)) {
b.Text = player;
}
}
之后你还需要将player
从X
翻到O
,反之亦然,但我会知道如何做到这一点。 : - )
答案 1 :(得分:1)
将tictactoe更改为:
public void tictactoe(object sender, EventArgs e)
{
var button = (Button)sender;
if (button.Text == "")
button.Text = player;
}