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 MdiClientPrivate 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.ControlsTry
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 PintarFondoCatch 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