【问题标题】:Control input via button通过按钮控制输入
【发布时间】:2014-11-04 12:39:24
【问题描述】:

我制作了一款井字游戏,并尝试添加一些功能。 我习惯于使用

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");

        }

当我单击之前已经单击过的按钮时,我得到“无效输入”,我只想能够单击另一个按钮。 如果我点击一个已经被占用的按钮,我不想失去我的轮到

【问题讨论】:

  • 我认为您需要删除string ctrlName = ((Button)sender).Name;ctrlName = "A1"; 并将if 语句更改为if (!b.Text.Equals(""))...
  • 这只是名称。 A1 和 b 得到了相同的值。我还是有问题
  • 点击时A1.Text 是什么?例如,在 messagebox.show 中显示(用于调试):MessageBox.Show("Button.Text is " + b.Text + ". Not A Valid Input");
  • A1.Text = X b.Text = X 它有效,当我点击之前已经点击过的按钮时,我得到“无效输入”,我只想能够单击另一个按钮。如果我点击一个被占用的按钮,我就失去了轮到我了
  • 你有什么代码(如你所说)“获取”按钮?请同时发布此代码。

标签: c# button controls


【解决方案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

的问题

【讨论】:

  • 问题不是很清楚,请见谅并感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多