启用/禁用按钮

时间:2017-05-23 11:20:44

标签: c# winforms

我无法让我的开始'当我选择任一个收音机框时显示的按钮。

Screenshot

理想情况下,当选择其中一个方框时,“开始”#39;按钮将启用并允许单击。

以下是我的表单代码,因为我对C#相对较新,我不确定是否发布了您需要的所有代码,如果需要,我会发布更多代码。< / p>

    public partial class mainForm : Form
{
    public mainForm() {
        InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e) {

    }

    private void mainForm_Load(object sender, EventArgs e) {
        title.Font = new Font("Arial", 10, FontStyle.Bold);
    }

    private void startButton_Click(object sender, EventArgs e) {
        if (radioDice.Checked) {
            startButton.Enabled = true; //Activates 'start' button
            whichDiceGameForm GameForm = new whichDiceGameForm(); 
            GameForm.Show(); 
        }
        if (radioCard.Checked) {
            startButton.Enabled = true; //Activates 'start' button
            whichCardGame GameForm = new whichCardGame();
            GameForm.Show(); 
        }

    }
}

[张贴给朋友。]

2 个答案:

答案 0 :(得分:2)

您已将启用代码放在按钮的Click事件处理程序中,而您应该在更改的复选框上执行此操作。 拿这个代码:

if (radioDice.Checked) 
{
     startButton.Enabled = true;
}

到radioDice复选框改变了事件处理程序和这一个:

if (radioCard.Checked) 
{
     startButton.Enabled = true; //Activates 'start' button
}

到radioCard复选框改变了事件处理程序。

答案 1 :(得分:1)

伙计,认真?

解答: 您正在尝试在单击该按钮时启用DISABLED按钮。您无法单击“禁用”按钮。更重要的是 - 你复制了你的代码。

应始终启用按钮。你只有两个选择。每个选择启用按钮。所以它应该始终启用。无论选择。如果隐藏了某些内容并且可能禁用了按钮,则启用Radio Click事件中的按钮。

有关您的代码的其他信息: 现在。关于代码重复。看看你在startButton_Click中做了什么。你有重复的代码。

您可以执行以下操作:

BaseGameForm f = null;
if(radioDice.Checked)
  f = new DiceGameForm();
else
  if(radioCard.Checked)
      f = new CardGameForm();

f.Show();

(BaseGameForm是每场比赛的基础形式) 但这不是一个好的解决方案。更好的解决方案是(在construtor的某个地方):

radioDice.Tag = new DiceGameForm();
radioCard.Tag = new CardGameForm();

然后在“开始”按钮中单击,查找已选中的收音机:

foreach(Control c in selectGameTypeGroupBox.Controls) //you could do this using LINQ
{
    if((c is RadioButton) && ((RadioButton)c).Checked)
    {
        ((Form)c.Tag).Show();
    }
}

但这仍然不是一个好的解决方案,因为你在启动时创建所有游戏形式,这是愚蠢的。

因此,更好的解决方案是将游戏形式类名保留在您的无线电标签属性中,然后使用反射和激活器创建此类的对象。

但这仍然不是最好的解决方案。但我认为这是你的第一个应用程序之一,所以我现在不会告诉你将gui与逻辑分开。如果您想了解更多信息 - 请在互联网上阅读。或者只是问问。