我正在开发一个程序,该程序将根据Code Complete 2nd Edition中的32个主题来判断程序员的初级,中级或专家级。我正在使用32个复选框和一种方法来确定单击了哪些复选框。问题是,当我检查复选框的被选中属性是否等于true时,它会在复选框被实际选中之前得到结果。这是我所有的源代码(到目前为止):
public partial class Main : Form
{
private int baseScore = 0;
public Main()
{
InitializeComponent();
}
private void buttonCalculateScore_Click(object sender, EventArgs e)
{
DetermineLevelOfProgrammer();
}
private void DetermineLevelOfProgrammer()
{
if ((baseScore >= 0) || (baseScore <= 14))
{
labelYourScore.Text += " " + baseScore.ToString();
labelDescription.Text = "You are a beginning programmer, probably in your first year of computer \n"+
"science in school or teaching yourself your first programming language. ";
}
// Do the other checks here!
}
// If checkbox is checked then increment base score,
// otherwise decrement base score.
private void checkBoxVariant_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxVariant.Checked)
baseScore++;
else
baseScore--;
}
}
最佳答案
我不确定checkBoxVariant是什么,但是...
我认为问题在于checkBoxVariant只是32个CheckBox中的1个。我假设您将所有32个CheckChanged事件都连接到checkBoxVariant_CheckedChanged方法。
它应该是什么样的:
// If checkbox is checked then increment base score,
// otherwise decrement base score.
private void checkBoxVariant_CheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
baseScore++;
else
baseScore--;
}
sender是一个Object,它指向导致事件引发的实际Object。由于任何事情都可能引发该事件,因此它只是一个必须强制转换为CheckBox的对象。