通过按钮控制输入

本文关键字:输入 控制 按钮 | 更新日期: 2023-09-27 18:28:58

我制作了一个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");
        }

当我点击一个我以前已经点击过的按钮时,我会得到"无效输入",我只想能够点击另一个按钮。如果我点击一个已经点击的按钮

通过按钮控制输入

,我不想失去我的回合

根据我所读的内容,我想我知道你在找什么。您正在寻找一种方法来迫使用户在单击已执行的按钮时失去回合,并且您不希望将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;
}

这样做的目的是在表单中搜索具有指定名称的控件,由于按钮的名称相似,我们可以很容易地搜索它们。然后,我们可以将一个特定的函数绑定到所有这些函数,这样你就只有1个函数来修改,而不是9个函数,并且你可以验证它们是否都工作相同。以下是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属性来禁用按钮。我知道你不知道什么按钮会变灰,但如果你为按钮创建自己的风格指南,你可以随心所欲。不过,这可能很有挑战性,因为您必须修改按钮的默认样式模板才能实现这一点。这是另一个问题,讨论的只是