Как я могу сравнить выбор переключателя со значением переменной в C#? - PullRequest
0 голосов
/ 04 августа 2020

Это было задание из моего учебника для класса C#, которое я так и не смог заставить нормально работать. Я поискал в Интернете и не нашел ответа. Я спросил своего профессора и других студентов, и они либо не дали мне ответов (отлаживать одну проблему за раз), либо ответили на проблемы, которых у меня не было. Я чувствую, что это должно быть что-то очень простое, что мы узнали бы в этом базовом c вводном классе, но я не могу этого понять. Вот точная подсказка для справки:

Создайте проект с именем GuessANumber с формой, которая содержит игру в угадывание с пятью RadioButton, пронумерованными от 1 до 5. Случайным образом выберите одну из RadioButton в качестве кнопки победы. Когда пользователь щелкает RadioButton, отображается сообщение, показывающее, прав ли пользователь.

Добавьте метку в форму, которая предоставляет подсказку. При наведении указателя мыши на метку уведомите пользователя об одном неверном RadioButton. После того, как пользователь сделает выбор, отключите все RadioButtons.

Мне удалось сгенерировать случайное число, создать метку, которая при наведении указателя мыши показывает один неправильный ответ, и как только пользователь щелкает радио кнопка, она отключает другие кнопки.

Проблема, с которой я столкнулся, заключалась в попытке сравнить выбранную радиокнопку с ответом на случайное число.

Сначала я попытался сравнить значение в обработчиках событий вот так:

private void AnswerButton1_CheckedChanged(object sender, EventArgs e)
        {
            AnswerButton2.Enabled = false;
            AnswerButton3.Enabled = false;
            AnswerButton4.Enabled = false;
            AnswerButton5.Enabled = false;
            if (randomNumber == 1)
            {
                ResultLabel.Text = "Correct";
            }
            else
            {
                ResultLabel.Text = "Incorrect";
            }
        }

Я понял, что не знаю, как передать значение randomNumber в методы обработчика событий. Итак, я попытался настроить if / else l oop, чтобы проверить, какая кнопка была выбрана с помощью свойства .Checked. Я сделал это в Form1, где randomNumber инициализируется и назначается, чтобы я мог сравнивать их друг с другом, и я также попытался создать отдельный метод для запуска этого l oop, которому я передал randomNumber. Примерно так:

if (AnswerButton1.Checked && answer == 1)
            {
                ResultLabel.Text = "Correct";
            }

Оба эти типа работали, но у них обоих была одна и та же проблема в том, что l oop запускается немедленно при загрузке формы, поэтому он всегда находит значение else (нет кнопка выбрана) верно. И нажатие кнопки в этот момент не имеет никакого эффекта.

Итак, мой вопрос: как я могу проверить выбор переключателя по значению, присвоенному при инициализации программы?

1 Ответ

0 голосов
/ 04 августа 2020

«Я не знал, как передать значение randomNumber в методы обработчика событий»

Похоже, вы объявляете случайное число внутри метода, что означает, что он имеет область действия только для этого метода. Вместо этого создайте поле класса для хранения значения, чтобы оно было доступно для всех методов класса:

public partial class Form1 : Form
{
    // Give our random number class-level scope, so all class methods can access it
    private int randomNumber;
    private Random random = new Random();

    public Form1()
    {
        InitializeComponent();

        // Set the random number when the form starts
        this.randomNumber = random.Next(1, 6);
    }

    private void AnswerButton1_CheckedChanged(object sender, EventArgs e)
    {
        AnswerButton2.Enabled = false;
        AnswerButton3.Enabled = false;
        AnswerButton4.Enabled = false;
        AnswerButton5.Enabled = false;

        // Now we have access to the random number because it has class-level scope
        if (this.randomNumber == 1)
        {
            ResultLabel.Text = "Correct";
        }
        else
        {
            ResultLabel.Text = "Incorrect";
        }
    }
}
...