【发布时间】:2015-07-30 05:11:15
【问题描述】:
在我的程序中,switch 语句用于分配特定按钮的特定属性,其中一个属性是为用户需要单击以正确回答问题的按钮分配“正确”标签。我遇到的问题是,由于某种原因,当只有带有“正确”标签的按钮应该这样做时,不正确的按钮会显示“你猜对了”消息。
public void SetButtonContent(string chosenMetal, TextBlock reagentText, TextBlock transMetalText,
Button opt1, Button opt2, Button opt3, Button opt4, Button opt5, Button opt6, Button opt7, Button opt8)
{
string pickedMetal = chosenMetal;
string pickedReagent = CycleThroughReagents();
reagentText.Text = pickedReagent;
transMetalText.Text = pickedMetal;
BrushConverter bc = new BrushConverter();
switch (pickedMetal)
{
case "Copper": //this is only one out of six cases, but all the cases have relatively the same format.
opt1.Content = string.Format("{0} \n {1} \n{2}", Cu.hexAqColour, Cu.hexAqFormula, Cu.hexAqState);
opt1.Background = Brushes.Blue;
opt2.Content = string.Format("{0} \n {1} \n{2}", Cu.dilNaOHRctColour, Cu.dilNaOHRctFormula, Cu.dilNaOHRctState);
opt2.Background = Brushes.Blue;
opt3.Content = string.Format("{0} \n {1}", Cu.excessNaOHColour, Cu.excessNaOHFormula, Cu.excessNahOHState);
opt3.Background = Brushes.Blue;
opt4.Content = string.Format("{0} \n {1} \n{2}", Cu.dilNH3RctColour, Cu.dilNH3RctFormula, Cu.dilNH3RctState);
opt4.Background = Brushes.Blue;
opt5.Content = string.Format("{0} \n {1} \n{2}", Cu.ExcessNH3Colour, Cu.ExcessNH3Formula, Cu.ExcessNH3State);
opt5.Background = Brushes.DarkBlue;
opt6.Content = string.Format("{0} \n {1} \n{2}", Cu.saltRctColour, Cu.saltRctFormula, Cu.saltRctState);
opt7.Content = string.Format("{0} \n {1} \n{2}", Cu.Na2CO3RctColour, Cu.Na2CO3RctFormula, Cu.Na2CO3RctState);
opt7.Background = Brushes.Blue;
opt8.Content = string.Format("{0} \n {1} \n{2}", Cu.ClRctColour, Cu.ClRctFormula, Cu.ClRctState);
opt8.Background = Brushes.Yellow;
if (pickedReagent == reagentsList[0])
opt1.Tag = "correct";
if (pickedReagent == reagentsList[1] || pickedReagent == reagentsList[3])
opt2.Tag = "correct";
opt4.Tag = "correct";
if (pickedReagent == reagentsList[2] || pickedReagent == reagentsList[5])
opt3.Tag = "correct";
opt6.Tag = "correct";
if (pickedReagent == reagentsList[4])
opt5.Tag = "correct";
if (pickedReagent == reagentsList[6])
opt7.Tag = "correct";
else
opt8.Tag = "correct";
break;
default:
break;
}
}
上面的方法是用来设置按钮内容的,然后下面的方法在我的'MainWindow'代码中来处理每个被点击的按钮。
public void CheckForCorrect(Button button)
{
if ((string)button.Tag == "correct" && amtLeft != 0)
{
amtLeft -= 1;
MessageBox.Show("You guessed correct!");
_GameControl.SetButtonContent(chosenMetal, ReagentAdded, transMetal, Opt1, Opt2, Opt3, Opt4, Opt5, Opt6, Opt7, Opt8);
button.IsEnabled = false;
}
if ((string)button.Tag != "correct" && amtLeft != 0)
{
MessageBox.Show("Oops!");
}
if (amtLeft == 0)
{
SwitchMetals();
}
}
按钮内容首先在“MainWindow()”类中设置,是在程序中执行“SetButtonContent”时的第一个实例。
public MainWindow()
{
InitializeComponent();
chosenMetal = "Copper";
_GameControl.SetButtonContent(chosenMetal,ReagentAdded, transMetal, Opt1, Opt2, Opt3, Opt4, Opt5, Opt6, Opt7, Opt8);
Opt1.Click += HandleButtonClicks;
Opt2.Click += HandleButtonClicks;
Opt3.Click += HandleButtonClicks;
Opt4.Click += HandleButtonClicks;
Opt5.Click += HandleButtonClicks;
Opt6.Click += HandleButtonClicks;
Opt7.Click += HandleButtonClicks;
Opt8.Click += HandleButtonClicks;
}
任何帮助和建议将不胜感激,因为我不确定发生这种情况是否会出错。
【问题讨论】: