Descripción
El Frame es un control que se utiliza como contenedor de otros controles, de esta manera los podemos agrupar.
Por ejemplo como muestra la siguiente imagen:
Para colocar controles dentro de un Frame, lo que debemos hacer es seleccionar del cuadro de controles de visual basic el que queramos, y dibujarlo dentro del mismo. Automáticamente este quedará dentro del frame
Para asegurarnos que realmente lo está, podemos desplazarlo hasta el límite del Frame y ver que el control desaparece, para que se entienda mejor mirar la siguiente imagen:
Podemos ver que el Command1 si lo corremos al limite derecho del Frame este desaparece, si no ocurriera esto el control no estaría dentro del mismo.
Otra forma de colocar los controles dentro de un Frame es, por ejemplo si tenemos 5 controles en un formulario y los quisiéramos colocar dentro, los seleccionaríamos haciendo Click izquierdo y manteniendo presionada la tecla Ctrl. Una vez que están todos seleccionados, desplegamos el menú Edición, seleccionamos Cortar, luego seleccionamos el control Frame y elegimos la opción Pegar.
Propiedades
Propiedad Caption:
Caption es la propiedad por defecto del control Frame y lo que hace es mostrar un texto a modo de título en la parte superior para el marco.
Para asignar el texto lo podemos hacer desde la ventana de propiedades de vb y seleccionar dicha propiedad, o si la establecemos mediante código en tiempo de ejecución lo haríamos así
- Option Explicit
-
- Private Sub Command1_Click()
-
- Frame1.Caption = "Texto del Frame"
- End Sub
Propiedad BorderStyle
Esta propiedad que posee el valor 0 y 1, indica si el Frame tendrá o no un borde. La siguiente imagen muestra en la izquierda un Frame con el BorderStyle en 0 mientras que a la derecha un Frame con el BorderStyle en 1
Una cosa importante es que si le quitamos el borde al control, el caption o texto del Frame no se visualizará.
Otras propiedades comunes
- Font : permite establecer el tipo de fuente : Negrita, subrayado, el tamaño, cursiva, tachado, etc .., y la propiedad
- ForeColor: permite establecer el color de la fuente.
- BackColor : el color de fondo del objeto
- Enabled : Determina si está habilitado o no el Frame.
- Height y Width : Determina el alto y ancho del control respectivamente.
- Left y Top: Determina la posición izquierda y superior en el contenedor, por lo general en el formulario, aun que puede ser cualquier otro que actué como contenedor de controles, como es el caso de un PictureBox.
- Visible : Devuelve y establece si el Frame se encuentra o no visible.
Ejemplos varios
Recorrer todos los Frame de un formulario
Si en algún momento es necesario poder averiguar todos los controles Frame que se encuentran en el formulario actual, por ejemplo para cambiarle alguna propiedad, es posible utilizar un bucle For Each y mediante el operador TypeOf de Visual basic, comprobar el tipo de objeto. Ejemplo
Lo siguiente es un simple ejemplo que recorre todos los controles del formulario, y dentro del bucle se verifica la clase de control. Si el control es un Frame, entonces le cambia la propieda Enabled a True o False dependiendo del valor del CheckBox, y también le cambia la propiedad Enabled a los controles que se encuentren dentro de los Frames
Colocar un CheckBox en el formulario, algunos frames por ejemplo, y dentro de los frames algunos controles
Código fuente en el formulario
- Option Explicit
-
-
- Private Sub Check1_Click()
- Call EnabledDisabledFrames(Abs(Check1.Value))
- End Sub
-
-
-
- Private Sub EnabledDisabledFrames(ByVal bValue As Boolean)
-
- Dim xControl As Control
-
- For Each xControl In Me.Controls
-
- If TypeOf xControl Is Frame Then
- xControl.Enabled = bValue
- End If
-
-
- On Error Resume Next
-
- If TypeOf xControl.Container Is Frame Then
- xControl.Enabled = bValue
- End If
- On Error GoTo 0
- Next
-
- End Sub
-
- Private Sub Form_Load()
- With Check1
- .Caption = "Habilitar / Deshabilitar Frames"
- .Value = 1
- End With
- End Sub
Ajustar el control a las dimensiones del formulario
Lo siguiente , al maximizar o cambiar las dimensiones de la ventana, se ajusta el tamaño del frame modificando el ancho y alto del control.
Colocar un Frame y un Botón de comando
- Option Explicit
-
-
- Private Sub Form_Resize()
-
- Dim lFrameHeight As Long
-
- lFrameHeight = Me.ScaleHeight - 100 - Command1.Height
-
-
- If lFrameHeight < 0 Then lFrameHeight = 0
-
-
- With Frame1
- .Move 50, 10, Me.ScaleWidth - 75, lFrameHeight
- End With
-
-
- With Command1
- .Top = Frame1.Top + Frame1.Height + 50
- .Left = Frame1.Left + Frame1.Width - .Width
- End With
-
- End Sub
-
-
- Private Sub Command1_Click()
- Unload Me
- End Sub
-
- Private Sub Form_Load()
- Command1.Caption = "Salir .."
- End Sub
Crear Frame en tiempo de ejecución
Este código , crea un control en tiempo de ejecución utilizando el método Add de la colección Controls de los formularios, y declara una variable de tipo "Frame" con la palabra reservada Withevents de Visual basic para poder acceder a los eventos del mismo, como cualquier otro Frame, es decir los eventos clic, DobleClic, etc ..
Código fuente en el formulario principal:
- Option Explicit
-
-
- Private WithEvents mFrame As Frame
-
- Private Sub Form_Load()
-
- Set mFrame = Me.Controls.Add("vb.Frame", "NombreDelFrame")
-
-
- With mFrame
-
- .Move 500, 500, Me.ScaleWidth - 1000, Me.ScaleHeight - 1000
-
- .Caption = "Frame creado en tiempo de ejecución"
- .Font.Size = 10
- .Font.Bold = True
- .Visible = True
- End With
-
- End Sub
-
-
- Private Sub mFrame_Click()
- MsgBox "Clic en el Frame", vbInformation
- End Sub
-
-
- Private Sub Form_Unload(Cancel As Integer)
- Me.Controls.Remove "NombreDelFrame"
- Set mFrame = Nothing
- End Sub