domingo, 3 de febrero de 2013

[WinForms] Listar formulario del proyecto

 

Introducción


Listar los forms del proyecto puede parecer una tarea a simple vista fácil, pero tiene sus particularidades.

En el ejemplo se listara los nombre de los formularios, pudiendo abrirlo mediante la selección en una lista.

SNAGHTML2eee2d7c

 

Listar Formularios


Para listar los formularios podremos ayudarnos de linq, este nos permitirá filtrar por el tipo de clase del cual heredan los forms.

Para obtener las propiedades (como ser el Text) del formulario se requiere una instancia del mismo. Recordemos que en .net todos son objetos, por lo que un form requiere de una instancia para poder acceder a sus propiedades.

 

private void frmPrincipal_Load(object sender, EventArgs e)
{
    
    Assembly asm = Assembly.GetExecutingAssembly();
    
    List<Form> formList = asm.GetTypes()
                                .Where(x => x.IsSubclassOf(typeof(Form)))
                                .Select(x => (Form)Activator.CreateInstance(x))
                                .ToList();


    lstForms.DisplayMember = "Text";
    lstForms.DataSource = formList;
    
}

También se puede realizar la misma tarea sin hacer uso de linq

 

private void frmPrincipal_Load(object sender, EventArgs e)
{

    Assembly asm = Assembly.GetExecutingAssembly();

    List<Form> formList = new List<Form>();

    foreach (Type item in asm.GetTypes())
    {
        if (item.IsSubclassOf(typeof(Form)))
        {
            formList.Add((Form)Activator.CreateInstance(item));
        }
    }

    lstForms.DisplayMember = "Text";
    lstForms.DataSource = formList;

}

Código


5 comentarios:

  1. Hola leandro, se puede hacer lo mismo pero mostrando los formularios en un datagridview ?

    ResponderEliminar
  2. hola Dcggler

    claro por supuesto

    en realidad como son simples nombres de formularios use un control simple como es el listbox, pero puedes usar cualquier otro que necesites, y mostrar mas propeidades del formulario si lo necesitas

    puedes definir las columnas en el datagridview y usa la propiedad que asigno al DisplayMember en el DataPropertyName de la columan del grid

    saludos

    ResponderEliminar
  3. Hola Leandro.
    En este ejemplo abro un form y lo cierro, y al volver querer abrir el mismo form me genera error.

    ResponderEliminar
  4. hola Dante

    que error?
    porque decir que se genera un error sin mencionar el mensaje o en que linea marca el problema no ayuda mucho para que pueda darte una respuesta

    saludos

    ResponderEliminar
  5. Me da un error al cuando el Formulario recibe parámetros en constructor, no quiero hacer una sobrecarga por que eso seria tedioso por que en varios de mis formularios tengo parámetros en el constructor del mismo.

    ResponderEliminar