Colabora .NET |
Imagen de fondo única para el MDI y sus formularios hijosPermitirá definir una imagen única de fondo para el MDI y los formularios hijos de este que lo requieran al igual que la forma de globalizar un MDI y devolverle datos desde los formularios hijos.
Fecha: 23/Ago/2006 (20-8-2006)
|
IntroducciónEste artículo es una implementación al artículo llamado Cargar un formulario desde su nombre en una variable y solamente una vez, por lo tanto es importante leerlo ya que algunas cosas no serán explicadas en este. En Visual Basic 6.0, colocar una imagen en el fondo del MDI era un poco complicado. Habian trucos como el de crear un formulario hijo sin bordes, anexarle un objeto Image y cargarle una imagen y le cambiamos la propiedad Stretch a True y este era invocado al momento de cargar el MDI. De esta forma nuestro MDI tenía un fondo o la otra forma era usando una API.
Primer PasoTeniendo el mismo proyecto del artículo Cargar un formulario desde su nombre en una variable y solamente una vez, iremos al formulario MDI y agregaremos un objeto PictureBox. En la propiedad Image, colocaremos la imagen que utilizaremos de fondo. Cambiaremos la propiedad SizeMode por StretchImage. Colocaremos False en la propiedad Visible del PictureBox. También anexaremos un objeto StatusBar el cual utilizaremos más adelante para explicar la globalización del MDI. Segundo PasoAdicionaremos el siguiente código al formulario MDI: 'Variables y propiedad para declarar el MDI como global ante sus hijos Private Shared formglo As frmmdi Public Shared Property gf() As frmmdi Get If formglo Is Nothing OrElse formglo.IsDisposed Then formglo = New frmmdi End If Return formglo End Get Set(ByVal Value As frmmdi) formglo = Value End Set End Property Private Sub frmmdi_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'Cargamos el MDI en la propiedad para indicar su globalidad Me.gf = Me 'Rellenamos el picture box en todo el MDI Me.PictureBox1.Dock = DockStyle.Fill End Sub Private Sub frmmdi_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Resize 'Tomamos la imagen del picturebox, a un objeto imagen Dim imagen As New Drawing.Bitmap(PictureBox1.Image, Me.Width, Me.Height) 'La cargamos al background Me.BackgroundImage = imagen End SubQué es todo esto? El primer párrafo es una propiedad que define el MDI como un formulario global para que pueda ser invocado desde cualquier otro. En el Evento Load, cargamos el MDI a la variable global. Luego le indicamos al PictureBox, que se va a rellenar en todo el formulario MDI, colocando Fill en la propiedad Dock. En el evento Resize, tomamos el valor de la propiedad Image del PictureBox, cargándolo a un objeto nuevo de tipo Image, pero con el tamaño del MDI, es decir las propiedades Width y Height. Luego le colocamos dicha variable definida como imagen, a la propiedad BackgroundImage del MDI. Tercer PasoA cada formulario hijo le anexaremos el siguiente código: Private Sub frmhijo1_Activated(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Activated 'Cada vez que se active el formulario hijo, indicara en la StatusBar del MDI, ' donde esta ubicado frmmdi.gf.StatusBar1.Text = "Estoy en hijo 1" 'Redibujara el fondo de este hijo, pero teniendo como fondo la imagen del MDI dibujar_fondo() End Sub Private Sub frmhijo1_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Resize 'Cada vez que cambie el tamaño del formulario deberá redibujar el fondo dibujar_fondo() End Sub Private Sub frmhijo1_Closed(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Closed 'Al cerrar el formulario, deberá blanquear la StatusBar frmmdi.gf.StatusBar1.Text = String.Empty End SubQué es todo esto? en el evento Activate de cada formulario Hijo (en este caso el hijo1), mandaremos un valor a la StatusBar indicando que este formulario hijo acaba de ser activado o acaba de tomar el foco. En este mismo evento, invocamos la Sub dibujar_fondo. En el evento Resize del formulario hijo, le indicaremos que cuando se realice este evento, vaya a la Sub dibujar_fondo. En el evento Closed le indicamos que vacie la propiedad Text del objeto StatusBar del MDI ya que no debe mostrar nada si no hay ningún formulario hijo abierto. Ahora si vemos la Sub dibujar_fondo. En esta Sub hacemos algo parecido a lo realizado en el evento Resize del MDI, pero tomando la imagen desde el objeto PictureBox del MDI. A continuación procedemos a compilar y realizar las pruebas pertinentes. Es de aclarar que podemos colocar la Sub dibujar_fondo en un módulo y enviarle los parámetros necesarios para poder hacer lo que necesitamos y nos economizaremos un poco más de código. Espero que sea de mucha utilidad. 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_fondo_mdi_e_hijos.zip - (15) KB
|