Как получить доступ к элементу radioButton, который НЕ выбран?

Рейтинг: 1Ответов: 2Опубликовано: 14.09.2014

Здравствуйте! Пишу маленькую программу для тестирования. За основу взял код из книги Зиборов В.В. - Visual С# 2012 на примерах. На форме имеется label1, radioButton1 ... radioButton7 и две кнопки button.

using System;
using System.Windows.Forms;
using System.IO;

namespace Test
{
    public partial class Form1 : Form
    {
        // Внешние переменные:
        int CorrectAnswer = 0;  // Количество правильных ответов
        int WrongAnswer = 0; // Количество неправильных ответов
        String[] MassiveCorrectAnswers = new String[100];
        String[] MassiveWrongAnswers = new String[100];
        int NumberOfCorrectAnswer;  // Номер правильного ответа
        int ChosenAnswer;  // Номер ответа, выбранный студентом
        System.IO.StreamReader Reader = new System.IO.StreamReader
            (@"Путь к файлу\...\Название файла.txt",
            System.Text.Encoding.GetEncoding(1251));
        // Тут пропущен код, который считывает файл и выводит на форму
        // Выясняем, какой ответ - правильный:
        NumberOfCorrectAnswer = int.Parse(Reader.ReadLine());

        void SwitchChanged(Object sender, EventArgs e)
        {
            RadioButton Switch = (RadioButton)sender;
            var tmp = Switch.Name;
            // Выясняем номер ответа, выбранный студентом:
            ChosenAnswer = int.Parse(tmp.Substring(11));
        }
        private void button1_Click(object sender, EventArgs e)
        {   
            if (ChosenAnswer == NumberOfCorrectAnswer) CorrectAnswer++;
            if (ChosenAnswer != NumberOfCorrectAnswer)
            {
                // Счет неправильных ответов:
                WrongAnswer++;
                // Запоминаем вопросы с неправильными ответами:
                MassiveWrongAnswers[WrongAnswer] = label1.Text;
                // Тут ошибка
                MassiveCorrectAnswers[WrongAnswer] =
                    radioButton[NumberOfCorrectAnswer].Text;
            }   
        }
    }
}

В общих словах: значение NumberOfCorrectAnswer считывается из файла, значение ChosenAnswer получаем через обработчик событий. Мы сравниваем их, если они не равны, добавляем в массив MassiveWrongAnswers[] вопрос, в котором ошибся пользователь, а в массив MassiveCorrectAnswers[] нужно добавить правильный ответ. Как обратиться к radioButton[i] (i - случайное число), если свойство Checked = false?

IDE - Microsoft Visual Studio 2013 Ultimate.

Ответы

▲ 1
var radioButton = this.Descendants<RadioButton>().Where(x => x.Name.Contains(id) && !x.Checked).FirstOrDefault();

где id - ваше случайное число.

▲ 1

На форме имеется radioButton1 ... radioButton7
Как обратиться к radioButton[i] (i - случайное число)

Вместо этого чуда сделать нормальный массив контролов и обращаться к нему.

Если уж совсем не хочется создавать радиобаттоны программно, то можно уже готовые заранее сложить в массив (естественно, надо будет перечислить все 7, а не ...):

var rbtns = new RadioButton[] {radioButton1, ..., radioButton7};