Artículo Reutilizando Controles
Autor / Fuente Harvey Triana / Programación Cliente-Servidor con Visual Basic, Kennet L. Spencer.
Tema Programación General.
Creado Noviembre 4 de 1997

Reutilizando Controles

Como Reutilizar Controles dentro de una Aplicación


Parece magia. La reutilización de un control en diversas partes de una aplicación es un recurso algo extraño y poco conocido. Primero que todo, ¿ por qué hacer esto ?. La razón es evidente: optimización recursos y rendimiento. Un ejemplo clásico es cuando una aplicación utiliza un ComboBox para listar ciertos datos de una bases de datos y ésta lista, por demás extensa, es requerida en varios formularios. Un método efectivo es cargar el ComboBox en un formulario oculto, y moverlo de contenedor cuando se necesite (en un sistema Cliente-Servidor o de multiusuario sus usuarios se lo agradecerán).

El contenedor puede ser un formulario, cuadro de imagen (PictureBox), un marco (Frame), y en general cualquier control con esta capacidad. Cuando se lleva un control de un contenedor a otro, no solo se desplaza la interfaz visual del control, sino también todos sus datos y código. Estudie los dos siguientes ejemplos. Primero que todo, utilice un modulo con la declaración de SetParent:

Public Declare Function SetParent Lib "USER32" _
       ( _
       ByVal hWndChild As Long, _
       ByVal hWndParent As Long _
       ) As Long

 

Ejemplo 1: Moviendo Controles entre Controles Contenedores

Esto es especialmente útil cuando se trabaja con TabStrip (prefiero usar un array de Frame en vez de PictureBox cuando programo TabStrip). El siguiente ejemplo es muy disiente. Crée un proyecto con un Frame y un ComboBox (fuera del Frame), agregue el siguiente código a Form1:

Option Explicit

Private Sub Form_DblClick()
    Set Combo1.Container = Frame1
    Combo1.Left = 90
    Combo1.Top = 300
End Sub

Private Sub Form_Load()
    Combo1.Top = 300
    Combo1.Left = 90
End Sub

Private Sub Frame1_DblClick()
    If SetParent(Combo1.hWnd, Me.hWnd) Then
       Combo1.Top = 300
       Combo1.Left = 90
    End If
End Sub

Puede ver los efectos al dar Doble-Click al Formulario y luego al Control de marco. Por supuesto una aplicación requerirá de un control más elaborado de la posición del ComboBox.

 

Ejemplo 2: Moviendo Controles entre Formularios

Cree un proyecto agregue dos Form. En el primer formulario agregue un CommandButon y un ComboBox.

Código en Form1:

Private Sub Command1_Click()
    Dim rtn
    Form2.Show
    rtn = SetParent(Combo1.hWnd, Form2.hWnd)
End Sub

Código en Form2:

Private Sub Form_Unload(Cancel As Integer)
    Dim rtn
    Hide
    Form1.Show
    rtn = SetParent(Form1.Combo1.hWnd, Form1.hWnd)
End Sub

Compruebe la funcionalidad ejecutando el proyecto. Cuando cierra Form2 el ComboBox regresa a su formulario de origen. Si lo desea puede crear un evento para Combo1 y verá que el código también cambia de Padre.


Coloco un ejemplo a vuestra disposición (mc.zip 2k)

Harvey Triana
Derechos Reservados. Autorización solo para programación