我做了一个Tic Tac Toe游戏,我试图添加一些功能。 我习惯用
来处理所采用的按钮button.enabled=false;
问题是按钮上的文字变为灰色。
所以我为每个按钮点击了一下按钮: A1_Click,A2_Click等
这是我在A1_click中的代码,对于其他按钮也是如此,唯一改变的是" A1"," A2"等等
Button b = (Button)sender;
if (!A1.Text.Equals(""))
{
MessageBox.Show("Not A Valid Input");
}
我得到"不是有效的输入"当我点击之前已经点击的按钮时,我只想点击另一个按钮。 如果我点击已经按下的按钮
,我不想轮到我答案 0 :(得分:1)
根据我所读到的内容,我想我知道你在寻找什么。您正在寻找一种方法来强制用户在单击已经执行的按钮时失去转弯,并且您不希望将enabled属性设置为false。如果这是你想要的,那么我可能会有一些可能有用的代码。首先,如果您将相同的点击事件分配给具有不同功能的多个按钮,您应该尝试这样的事情:
for (int i = 1; i < 10; i++)
{
string currentButtonName = "A" + i;
Control currentButton = this.Controls.Find(currentButtonName, true).FirstOrDefault();
currentButton.Click += OnGameButton_Click;
}
这样做是在表单中搜索具有指定名称的控件,并且由于您的按钮具有相似的名称,因此我们可以轻松搜索它们。然后我们可以将特定函数绑定到所有这些函数,以便修改9个函数而不是1,并且可以验证它们的工作方式是否相同。以下是OnGameButton_Click()
事件代码:
private void OnGameButton_Click(object sender, EventArgs e)
{
if (!hasGameStarted || shouldLoseTurn)
return;
// This is the current button user pressed
Button b = (sender as Button);
if (b.Name.Contains('A') && b.Enabled)
{
if (!b.Text.Equals(""))
{
MessageBox.Show("Not A Valid Input! You have lost your turn.");
shouldLoseTurn = true;
}
else
{
b.Text = currentPlayersLetter;
shouldLoseTurn = false;
}
}
}
正如你可以看到一些标志,我们可以监控游戏,并强制按钮做出相应的反应,看看功能的开头。我们必须验证游戏是否已经投入,并且当前用户由于按下相同的按钮而没有失去转弯。从那里我们只需要修改你所拥有的内容,这样如果他们按两次相同的按钮,那么我们会根据需要修改shouldLoseTurn
标志。
另一种方法是只使用Button.Enabled
属性来禁用该按钮。我知道你没有什么按钮变灰,但如果你为按钮创建自己的风格指南,你可以按照你想要的方式。这可能很有挑战性,因为您必须修改按钮的默认样式模板才能实现此目的。这是另一个仅讨论here