根据特定标准更改button格式

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

我得到了我的button的背景颜色更改为YellowGreen如果正确的答案被点击,其他三个去红色,但我的新问题是,我不知道如何做到这一点,如果用户点击的答案是错误的三个错误答案变为红色,并以绿色突出显示正确的答案(用户单击的button在其周围获得明亮的边框以通知所选的答案)。

为了解决原来的问题,我做了以下工作:

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()); } } } } } 

我尝试了一些不同的东西,但是它导致了一些奇怪的东西,这些东西基本上不是我想要做的,我不知道我需要用什么样的语法或代码来完成这个任务。

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

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

这应该给你一个想法,如何使用这个,你也可以突出代码右键单击,然后单击重构 – >提取方法会给你一个方法模板,你也可以使用

如果你想做一个更长的循环版本的循环通过特定类型的控制,你也可以做以下。你应该能够遵循这一点,并添加什么条件基于组件类型,你想工作。这是一件好事,你可以玩,也可以学习

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语句中设置enabled或disabled。 确保你正在检查下面的foreach循环

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