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.
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
Hola leandro, se puede hacer lo mismo pero mostrando los formularios en un datagridview ?
ResponderEliminarhola Dcggler
ResponderEliminarclaro 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
Hola Leandro.
ResponderEliminarEn este ejemplo abro un form y lo cierro, y al volver querer abrir el mismo form me genera error.
hola Dante
ResponderEliminarque 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
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