通过按钮控制输入

时间:2014-11-04 12:39:24

标签: c# button controls

我做了一个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");

        }

我得到"不是有效的输入"当我点击之前已经点击的按钮时,我只想点击另一个按钮。 如果我点击已经按下的按钮

,我不想轮到我

1 个答案:

答案 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

的问题