| 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 Class
A 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
|