根据特定条件更改按钮格式

时间:2013-03-12 18:33:54

标签: c# windows

我有一个小问题,但首先是一些上下文

如果点击了正确的答案,我的按钮的背景颜色变为YellowGreen而其他三个变为红色但是我的新问题是我无法弄清楚如何做到这样如果答案是用户点击错误,三个错误的答案变为红色,并以绿色突出显示正确的答案(用户点击的按钮会在其周围显示一个明亮的边框,以通知所选的答案)。

为了解决原始问题,我只做了以下几点:

if (btnA.Tag.ToString() == "0")
        {
            btnA.BackColor = Color.YellowGreen;
            btnB.BackColor = Color.Red;
            btnC.BackColor = Color.Red;
            btnD.BackColor = Color.Red;
        }

我为数字0-4做了以上四次(数组中的四个可能的答案;表格上的A,B,C或D。

我的代码现在如下:

private void button4_Click(object sender, EventArgs e)
    {

        //Disables the buttons upon clicking 
        btnA.Font = new Font(btnA.Font.Name, btnA.Font.Size, FontStyle.Bold);
        btnA.FlatAppearance.BorderColor = Color.Cyan;
        btnA.FlatAppearance.BorderSize = 3;
        btnA.Enabled = false;
        btnB.Enabled = false;
        btnC.Enabled = false;
        btnD.Enabled = false;

        if (btnA.Tag.ToString() == "0")
        {
            btnA.BackColor = Color.YellowGreen;
            btnB.BackColor = Color.Red;
            btnC.BackColor = Color.Red;
            btnD.BackColor = Color.Red;
        }

        if (btnA.Tag.ToString() == "0")
        {
            iCorrect++;
            if (debugMode)
            {
                Debug.WriteLine("Correct: " + iCorrect.ToString());
            }
        }
    }

    private void button5_Click(object sender, EventArgs e)
    {
        //
        btnB.Font = new Font(btnB.Font.Name, btnB.Font.Size, FontStyle.Bold);
        btnB.FlatAppearance.BorderColor = Color.Cyan;
        btnB.FlatAppearance.BorderSize = 3;
        btnA.Enabled = false;
        btnB.Enabled = false;
        btnC.Enabled = false;
        btnD.Enabled = false;


        if (btnA.Tag.ToString() == "1")
        {
            btnA.BackColor = Color.Red;
            btnB.BackColor = Color.YellowGreen;
            btnC.BackColor = Color.Red;
            btnD.BackColor = Color.Red;
        }

        if (btnA.Tag.ToString() == "1")
        {
            iCorrect++;
            if (debugMode)
            {
                Debug.WriteLine("Correct: " + iCorrect.ToString());
            }
        }
    }

    private void button6_Click(object sender, EventArgs e)
    {
        //
        btnC.Font = new Font(btnC.Font.Name, btnC.Font.Size, FontStyle.Bold);
        btnC.FlatAppearance.BorderColor = Color.Cyan;
        btnC.FlatAppearance.BorderSize = 3;
        btnA.Enabled = false;
        btnB.Enabled = false;
        btnC.Enabled = false;
        btnD.Enabled = false;

        if (btnA.Tag.ToString() == "2")
        {
            btnA.BackColor = Color.Red;
            btnB.BackColor = Color.Red;
            btnC.BackColor = Color.YellowGreen;
            btnD.BackColor = Color.Red;
        }

        if (btnA.Tag.ToString() == "2")
        {
            iCorrect++;
            if (debugMode)
            {
                Debug.WriteLine("Correct: " + iCorrect.ToString());
            }
        }
    }

    private void button7_Click(object sender, EventArgs e)
    {
        //
        btnD.Font = new Font(btnD.Font.Name, btnD.Font.Size, FontStyle.Bold);
        btnD.FlatAppearance.BorderColor = Color.Cyan;
        btnD.FlatAppearance.BorderSize = 3;
        btnA.Enabled = false;
        btnB.Enabled = false;
        btnC.Enabled = false;
        btnD.Enabled = false;

        if (btnA.Tag.ToString() == "3")
        {
            btnA.BackColor = Color.Red;
            btnB.BackColor = Color.Red;
            btnC.BackColor = Color.Red;
            btnD.BackColor = Color.YellowGreen;
        }

        if (btnA.Tag.ToString() == "3")
        {
            iCorrect++;
            if (debugMode)
            {
                Debug.WriteLine("Correct: " + iCorrect.ToString());
            }
        }
    }
}
}

我尝试了一些不同的东西,但它一直导致奇怪的事情基本上不是我想做的事情,我无法弄清楚我需要用什么样的语法或代码来实现这一点。 / p>

1 个答案:

答案 0 :(得分:2)

如果你想将Buttons设置为false,你可以创建另一个小方法,并在你想要启用或禁用按钮的地方调用它是一个代码示例

foreach( var control in this.Controls.OfType<Button>() )
{
   control.enabled = false;
} 

这应该为您提供如何使用它的想法,您还可以突出显示代码右键单击并单击Refactor-&gt; Extract Method将为您提供可以使用的方法模板

如果您想通过特定类型的控件执行更长版本的循环,您也可以执行以下操作..您应该能够遵循这一点并根据您想要工作的组件类型添加任何条件反对..对你有好处的东西以及从中学习

If you have TextBoxes您想要清除

YourFormName.Controls.OfType<TextBox>().ToList().ForEach(textBox => textBox.Clear());


private void ClearTextBoxes(Control control)
{
    foreach(Control childControl in control.Controls)
    {
         TextBox textbox = childControl as TextBox;
         if(textbox != null)
            textbox.Text = string.Empty;
         else if(childControl.Controls.Count > 0)
             ClearTextBoxes(childControl);//Recursive call here
    }
}

Check the Button / Sender Name或者如果你在forloop中,你可以检查例如caae语句中的text.Name然后在switch语句中设置启用或禁用。确保检查foreach循环中的以下内容

switch (((Button)sender).Name)
{
  case " btnA":
    {
     //sent enabled or disabled  
     break;
    }
case " btnB":
    {
       //sent enabled or disabled  
       break;
    }
//etc......
}