Тестер навыков программирования (проблема) - PullRequest
1 голос
/ 04 февраля 2009

Я работаю над программой, которая расскажет, на каком уровне находится программист: начинающий, средний или эксперт, основываясь на 32 предметах из теста в Code Complete 2nd Edition. Я использую 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--;
    }
}

Ответы [ 3 ]

6 голосов
/ 04 февраля 2009

Я не уверен, что checkBoxVariant точно, но ...

Мне кажется, проблема в том, что checkBoxVariant - это всего лишь 1 из 32 CheckBoxes. Я предполагаю, что вы связали все 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 - это Объект, который указывает на фактический Объект, вызвавший событие. Поскольку событие может вызывать что угодно, это просто Объект, который должен быть приведен к CheckBox.

6 голосов
/ 04 февраля 2009

if ((baseScore> = 0) || (baseScore <= 14)) </p>

Будьте осторожны - это всегда будет верным. Возможно, вы намеревались использовать &&.

1 голос
/ 04 февраля 2009

Событие CheckedChanged должно запускаться только после его проверки, поэтому я не думаю, что это ваша проблема. Однако, может быть, вам следует просто установить все флажки после нажатия кнопки «Отправить», тогда это может быть проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...