Colabora .NET |
Cargar un formulario desde su nombre en una variable y solamente una vezPermitirá cargar desde un formulario MDI, los formularios hijos pero a partir del nombre de cada uno y por una única vez.
Fecha: 21/Ago/2006 (20-8-2006)
|
IntroducciónCuando desarrollamos un aplicativo, por lo general utilizamos un formulario MDI donde diseñaremos un menú de acuerdo a nuestras necesidades y para cargar los formularios hijos, deberemos declarar cada uno de ellos.
Primer PasoCrearemos un proyecto el cual incluirá 3 formularios donde uno será el MDI (formulario principal) y los otros 2 serán hijos del MDI. Recordemos que para colocar un formulario MDI, debemos cambiar la propiedad
IsMdiContainer a True en el formulario que lo será. También adicionaremos un módulo. Segundo PasoAl formulario MDI le adicionaremos dos botones. Al primer botón le colocaremos en la propiedad Text, "Hijo1" y al segundo botón le coloreamos en la propiedad Text, "Hijo2". A cada uno de los formularios hijos, le adicionamos un botón que llevará en la propiedad Text, "Cerrar". Tercer PasoAl módulo le adicionaremos el siguiente código: Module modulo 'Función: chequear si el formulario ya ha sido cargado Public Sub llamarform(ByVal formulario As Form, ByVal mdi As Form) Dim frmllamado As Form Dim escargado As Boolean = False Try 'chequemos si el formulario ha sido cargado For Each frmllamado In mdi.MdiChildren 'Compara si es igual y retorna verdadero si lo es. If frmllamado.Text = formulario.Text Then 'Marca la bandera escargado = True 'Sale del loop si es verdadero Exit For End If Next If Not escargado Then 'Carga el formulario si no esta llamado formulario.MdiParent = mdi formulario.Show() ElseIf escargado Then 'Enfoca el objeto frmllamado.Focus() End If 'Nada que hacer, toca colocar la exception Catch ex As Exception 'Mostrar mensaje MsgBox(ex.Message & vbCrLf & ex.Source & vbCrLf & _ ex.StackTrace, MsgBoxStyle.Critical, "Error") End Try 'Limpiar todo formulario = Nothing frmllamado = Nothing End Sub End Module A formulario MDI le anexaremos el siguiente código: Public Class frmmdi Inherits System.Windows.Forms.Form Código generado por el Diseñador de Windows Forms Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click mostrarForm("frmhijo1") End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click mostrarForm("frmhijo2") End Sub Private Sub mostrarForm(ByVal nombreform As String) 'Creamos una variable tipo Form Dim frmdinamico As Form 'Extraemos toda la información necesaria para poder pasar 'con el solo nombre del formulario a la variable "frmdinamico", el objeto frmdinamico = AppDomain.CurrentDomain.CreateInstanceAndUnwrap( _ Me.GetType.Assembly.GetName.Name, _ System.String.Concat(Me.GetType.Assembly.GetName.Name, ".", nombreform)) 'Llamamos la rutina que no permitira abrir 2 veces el formulario llamarform(frmdinamico, Me) End Sub End ClassA cada formulario hijo le anexaremos el siguiente código: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub A continuación procedemos a compilar y realizar las pruebas pertinentes. Nota: Es de aclarar que alguna parte de este código lo encontré originalmente en inglés de la página www.planet-source-code.com y le hice la debida adaptación al español.
Espacios de nombres usados en el código de este artículo:System.Windows.Forms.Form
|
Código de ejemplo (ZIP): |
Fichero con el código de ejemplo:
amurcia_formulario_nombre.zip - 12.6 KB
|