Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: coco en Abril 03, 2010, 02:48:16 pm
-
Supongamos que necesito coleccionar varios objetos en un array dentro de una clase. Cada objeto se va agregando desde afuera (en este caso un form). Ahora mismo lo estoy pasando mas o menos asi:
Public Function PushObj (ByRef objNew As Long, ByVal strColName As String, ByVal lngKind As enmObjType, ByVal lngContent As enmColContent, Optional ByVal blnRequeired As Boolean = True, Optional ByVal blnComboUseIndex As Boolean = False) As Long
[...]
Set c_objArr(lngIndex).oObject = objNew
[...]
El tema es que cuando quiero acceder al objeto pasan 2 cosas, en algun caso (mas que nada con combo box) me dice "Se requiere un objeto" (pero haciendole mousehover a la variable del *objeto* me devuelve su valor); o en el mejor de los casos, el objeto esta, pero si yo cambio algun valor y luego quiero volver a leer su contenido, me devuelve el valor original.
En algun que otro codigo viejo (que ahora no recuerdo cual) habia visto que referenciaban a los objetos pasando su puntero y copiandolo a otro objeto (local), algo asi:
Public Function PushObj (ByVal lngPtr As Long) As Long
Dim objTemp As Object
Set objTemp = New 'pero aca no se que iba
CopyMemory ByVal ObjPtr(objTemp), ByVal lngPtr, 4
End Function
En fin, el que sepa algo que tire el chifle :D
saludos y felices pascuas!
-
C0C0
haciendo asi tendria que funcionar.
AddObj Combo1
Public Function AddObj(ObjSource As Object)
Dim ObjTemp As Object
Set ObjTemp = ObjSource
Debug.Print ObjTemp.Name
ObjTemp.AddItem "Test"
End Function
Lo que vos decis se utiliza para clases y colecciones normalmente, para controles con hacer eso tendria que ser suficiente.Ahora si que res usar el puntero y no tener el objeto referenciado permanentemente podes usar una coleccion con lo punteros y despues simplemente escanear los objectos asi
Private Sub Form_Load()
Module1.FindObj(ObjPtr(Combo1)).AddItem "test"
End Sub
Public Function FindObj(ObjSource As Long) As Object
Dim vItem As Variant
Dim vForm As Variant
For Each vForm In Forms
For Each vItem In vForm.Controls
If ObjPtr(vItem) = ObjSource Then
Set FindObj = vItem
End If
Next
Next
End Function