| 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 |
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
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.
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.
Harvey Triana
Derechos Reservados. Autorización solo para programación