Color de fondo en un formulario MDI
Y pintar en el �rea cliente MDI

Fecha: 04/03/2004 (06/Mar/2004)
Autor: Jos� Ram�n Pastor Compa�  [email protected]

 


Cuando empec� con Visual Basic 6, siempre tenia la man�a de cambiar el color de fondo de los formularios MDI y cuando ya sabia algo mas, les dibujaba degradados al estilo de los programas de instalaci�n.
Cuando empec� con VB .NET me di cuenta de que el color de fondo de un formulario no se puede cambiar, siempre aparec�a ese color "tosco" que no me gusta nada, as� que investigando encontr� un art�culo en Microsoft que explicaba como cambiar el color de fondo. Yo lo he mejorado un poco y adem�s de cambiar el color, creo degradados de fondo en el �rea cliente MDI.  

Para cambiar el color de fondo de un MDI a�ade el siguiente c�digo en el evento load del formulario:

Nota: Necesitamos la variable global ctlMDI
Dim ctlMDI as MdiClient

Private Sub TfrmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim ctl As Control 

'Estamos buscando en control que representa el area cliente MDI 
For Each ctl In Me.Controls

Try

ctlMDI = CType(ctl, MdiClient)

 ' Asignamos el color de fondo
ctlMDI.BackColor = Color.AntiqueWhite

'Aqu� asignamos el manejador para pintar el fondo con degradados o lo que
'queramos. Si solo queremos cambiar el color de fondo no hace falta, ni las funciones siguientes tampoco
 AddHandler ctlMDI.Paint, AddressOf PintarFondo

Catch ex As InvalidCastException

 End Try

Next

End Sub

Vale, ahora necesitamos la funci�n que pinta el fondo del area cliente:

Private Sub PintarFondo(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)

Dim GradientePanel As New LinearGradientBrush(New RectangleF(0, 0, ctlMDI.Width, ctlMDI.Height), Color.Blue, Color.Black,LinearGradientMode.Vertical)

 e.Graphics.FillRectangle(GradientePanel, New RectangleF(0, 0, ctlMDI.Width, ctlMDI.Height))

End Sub

Por �ltimo, es conveniente capturar el evento Resize del formulario.

Esto es as� porque me he dado cuenta de que cuando se redimensiona el formulario no se pinta bien el degradado, as� que si "capturamos" el evento y forzamos a que se repinte, todo ir� bien. Este es el c�digo.

Private Sub TfrmMain_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize

If Not (Me.ctlMDI Is Nothing) Then

Me.PintarFondo(Me.ctlMDI, New PaintEventArgs(Me.ctlMDI.CreateGraphics, New Rectangle(Me.ctlMDI.Location, Me.ctlMDI.Size)))

End If

End Sub


ir al ndice