Намирате всички контроли от няколко типа?

Опитвам се да намеря всички контроли в C# програма, които са радио бутони или квадратчета за отметка. Освен това искам да намеря и определено текстово поле. Накарах го да работи само с радио бутони - ако вместо това повторя реда IEnumerable с полета за отметка, това ми казва, че локална променлива с име buttons вече е дефинирана в този обхват. Благодаря за помощта.

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