¿Existe una forma más elegante de agregar controles de usuario a una lista?

Tengo 10 controles de usuario personalizados con ID's usercontrol1, usercontrol2, usercontrol3......usercontrol10.

Quiero agregar todos estos controles de usuario a una Lista "allusercontrol". Hago esto con fuerza bruta así

allusercontrol.Add(usercontrol1);
allusercontrol.Add(usercontrol2);
allusercontrol.Add(usercontrol3);
.
.
.
.
.

¿Hay una manera más elegante y fácil de hacer esta tarea trivial? Ves que los ID de los controles de usuario son parte de una serie "usercontrol"+an int

preguntado el 02 de julio de 12 a las 11:07

No nombre sus controles de una manera tan anónima. Lo que es más propenso a errores: Button1,Button2,Button2 or BtnInsert,BtnUpdate,BtnDelet? -

@TimSchmelter Actualicé mi pregunta para el control del usuario:

¿De dónde vienen estos controles de usuario? ¿Ya están en una página aspx? -

Sí, ya están en la página aspx. -

3 Respuestas

Desaconsejaría este enfoque ya que es propenso a errores. ¿Qué sucede si desea cambiarles el nombre? ¿Qué sucede si se olvida de esto y agrega otros controles con nombre? ButtonX que no debería estar en esta lista?

En su lugar, los recogería en un control de contenedor como Panel. Entonces puedes usar LINQ para encontrar lo relevante Buttons:

var myButtons = myPanel.Controls.OfType<Button>();

Enumerable.OfType filtrará y emitirá los controles en consecuencia. Si quieres filtrarlos más, puedes usar Enumerable.Where, Por ejemplo:

var myButtons = myPanel.Controls
                       .OfType<Button>()
                       .Where(btn => btn.ID.ToLower().StartsWith("button"));

Ahora puedes iterar esos Buttons, Por ejemplo:

foreach(Button btn in myButtons)
{
    // do something amazing
}

O simplemente puedes llamar ToList() conseguir un List<Button> (el núcleo de tu pregunta):

List<Button> allbuttons = myButtons.ToList();

Respondido 02 Jul 12, 11:07

Gracias Tim, esa es una buena solución. - Ashwin Singh

prueba con este código

List<UserControl> controls = new List<UserControl>
{
    usercontrol1,
    usercontrol2,
    usercontrol3
};

Respondido 02 Jul 12, 11:07

Todavía habría mucho código, considere un escenario de 100 controles de usuario. - Ashwin Singh

Ok, prueba con este código YourContainer.Controls.OfType (); - Aghilas Yakoub

Use Control.ControlCollection.AddRange - busque aquí

Respondido 02 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.