Поиск всех элементов управления нескольких типов?

Я пытаюсь найти все элементы управления в программе на С#, которые являются переключателями или флажками. Кроме того, я хочу также найти определенное текстовое поле. Я заставил его работать только с переключателями - если вместо этого я повторяю строку IEnumerable с флажками, это говорит мне, что локальная переменная с именем кнопки уже определена в этой области. Спасибо за помощь.

IEnumerable<RadioButton> buttons = this.Controls.OfType<RadioButton>();

foreach (var Button in buttons)
{
    //Do something
}

person user3600400    schedule 04.05.2014    source источник
comment
Вы не можете использовать одну и ту же переменную для флажков и радиокнопок.   -  person Black Frog    schedule 05.05.2014
comment
Есть ли способ использовать IEnumerable в операторах if/else? Например: if (questiontype == MCQ){ //IEnumerable для переключателей } else if (questiontype == Multiple select){ // IEnumerable для флажков }   -  person user3600400    schedule 05.05.2014


Ответы (2)


Вы можете выполнить то, что пытаетесь сделать, используя общий базовый класс Control:

IEnumerable<Control> controls = this.Controls
    .Cast<Control>()
    .Where(c => c is RadioButton || c is CheckBox || (c is TextBox && c.Name == "txtFoo"));

foreach (Control control in controls)
{
    if (control is CheckBox)
        // Do checkbox stuff
    else if (control is RadioButton)
        // DO radiobutton stuff
    else if (control is TextBox)
        // Do textbox stuff
}
person itsme86    schedule 04.05.2014
comment
Спасибо, это здорово. Есть ли способ в цикле if/else определить, был ли, например, проверен переключатель? Или если текстовое поле имеет пользовательский ввод? - person user3600400; 05.05.2014

Вам нужно будет использовать другое имя переменной для ваших флажков.

IEnumerable<RadioButton> buttons = this.Controls.OfType<RadioButton>();
IEnumerable<CheckBox> checkboxes = this.Controls.OfType<CheckBox>();

Вы также должны иметь возможность просто взять свое текстовое поле по имени, если оно хорошо известно.

person Jane S    schedule 04.05.2014