Clase dentro de clase VB6
Publicado por Lago GZ (1 intervención) el 28/06/2012 14:29:04
Buenas tardes.
Estoy intemtando crear una clase que tenga como propiedad otra clase. Pongo el código y me explico.
--------------------Clase A--------------------------
Private thisNombre As String
Private thisApellidos As String
Private thisNIF As String
Public Property Get Nombre() As String
Nombre= thisNombre
End Property
Public Property Let Nombre(pNombre As String)
thisNombre = pNombre
End Property
Public Property Get Apellidos() As String
Apellidos= thisApellidos
End Property
Public Property Let Apellidos(pApellidos As String)
thisApellidos = pApellidos
End Property
Public Property Get NIF() As String
NIF= thisNIF
End Property
Public Property Let NIF(pNIF As String)
thisNIF = pNIF
End Property
-------------------------Clase B----------------------------
Private thisIdCliente As Integer
Private thisClientes() As A
Private Sub Class_Initialize()
ReDim thisClientes(1)
End Sub
Public Property Get IdCliente() As Integer
IdCliente= thisIdCliente
End Property
Public Property Let IdCliente(pIdCliente As Integer)
thisIdCliente = pIdCliente
End Property
Public Property Get Clientes() As A()
Set Clientes= thisClientes
End Property
Public Sub SetCliente(pNome As String, pApelidos As String, pNIF As String)
If UBound(thisClientes) < 0 Then
ReDim thisClientes(1) '
Else
ReDim Preserve thisClientes(UBound(thisClientes) + 1)
End If
Set thisClientes(UBound(thisClientes)) = New A
With thisClientes(UBound(thisClientes))
.Nome= pNome
.Apelidos= pApelidos
.NIF = pNIF
End With
End Sub
Este es el código de ambas clases. La propiedad Clientes de la clase B no tiene la parte Let ni Set, pero creo el procedimiento SetCliente q lo q hace es rellenar la matriz de clases de A. Entonces en teoría al llamar desde por ejemplo un formulario a esta propiedad, gracias la parte Get de la propiedad me tendría q rellenar esta propiedad vien,no?
En otro formulario pongo un botón para probar la funcionalidad de la clase con el siguiente código:
Private Sub Command1_Click()
Dim Prueba As New B
Call Prueba.SetCliente( "nome1","apelido1", "nif1") 'LÍNEA DE EROR
Call Prueba.SetCliente("nome2","apelido2", "nif2)
Call MsgBox(Prueba.Beneficiarios(1).Nome)
Call MsgBox(Prueba.Beneficiarios(2).Nome)
Set Prueba = Nothing
End Sub
Y me da el siguiente error en la línea q tengo marcada como LÍNEA DE ERROR:
Error de compilación: número de argumentos erróneo o asignación de propiedad no válida.
Imagino q el problema será al recuperar la propiedad, pero la verdad llevo toda la mañana probando mil cosas y nada.
Un saludo y gracias.
Estoy intemtando crear una clase que tenga como propiedad otra clase. Pongo el código y me explico.
--------------------Clase A--------------------------
Private thisNombre As String
Private thisApellidos As String
Private thisNIF As String
Public Property Get Nombre() As String
Nombre= thisNombre
End Property
Public Property Let Nombre(pNombre As String)
thisNombre = pNombre
End Property
Public Property Get Apellidos() As String
Apellidos= thisApellidos
End Property
Public Property Let Apellidos(pApellidos As String)
thisApellidos = pApellidos
End Property
Public Property Get NIF() As String
NIF= thisNIF
End Property
Public Property Let NIF(pNIF As String)
thisNIF = pNIF
End Property
-------------------------Clase B----------------------------
Private thisIdCliente As Integer
Private thisClientes() As A
Private Sub Class_Initialize()
ReDim thisClientes(1)
End Sub
Public Property Get IdCliente() As Integer
IdCliente= thisIdCliente
End Property
Public Property Let IdCliente(pIdCliente As Integer)
thisIdCliente = pIdCliente
End Property
Public Property Get Clientes() As A()
Set Clientes= thisClientes
End Property
Public Sub SetCliente(pNome As String, pApelidos As String, pNIF As String)
If UBound(thisClientes) < 0 Then
ReDim thisClientes(1) '
Else
ReDim Preserve thisClientes(UBound(thisClientes) + 1)
End If
Set thisClientes(UBound(thisClientes)) = New A
With thisClientes(UBound(thisClientes))
.Nome= pNome
.Apelidos= pApelidos
.NIF = pNIF
End With
End Sub
Este es el código de ambas clases. La propiedad Clientes de la clase B no tiene la parte Let ni Set, pero creo el procedimiento SetCliente q lo q hace es rellenar la matriz de clases de A. Entonces en teoría al llamar desde por ejemplo un formulario a esta propiedad, gracias la parte Get de la propiedad me tendría q rellenar esta propiedad vien,no?
En otro formulario pongo un botón para probar la funcionalidad de la clase con el siguiente código:
Private Sub Command1_Click()
Dim Prueba As New B
Call Prueba.SetCliente( "nome1","apelido1", "nif1") 'LÍNEA DE EROR
Call Prueba.SetCliente("nome2","apelido2", "nif2)
Call MsgBox(Prueba.Beneficiarios(1).Nome)
Call MsgBox(Prueba.Beneficiarios(2).Nome)
Set Prueba = Nothing
End Sub
Y me da el siguiente error en la línea q tengo marcada como LÍNEA DE ERROR:
Error de compilación: número de argumentos erróneo o asignación de propiedad no válida.
Imagino q el problema será al recuperar la propiedad, pero la verdad llevo toda la mañana probando mil cosas y nada.
Un saludo y gracias.
Valora esta pregunta


0