Autor Tema: Problema con clase  (Leído 2818 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Problema con clase
« en: Mayo 09, 2011, 11:27:00 pm »
Hola a todos.
Tengo un problema que me está volviendo loco.
Tengo un modulo class [MiObjeto]

Código: [Seleccionar]
'Variables del objeto
Private rLeft As Long
Public Property Get Left() As Long
Left = rLeft
End Property

Public Property Let Left(ByVal vNewValue As Long)
    rLeft = newValue
End Property

y en un form pongo:

Código: [Seleccionar]
Dim objeto As New MiObjeto
Private Sub Command2_Click()
objeto.Left = 200
MsgBox objeto.Left
End Sub

Y cuando hago click en el command button 2 me sale un msgbox pero que me dice "0" en vez de "200".
¿Qué está mal?

Gracias
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

xkiz ™

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 283
  • Reputación: +30/-11
    • Ver Perfil
    • xkiz ™
Re:Problema con clase
« Respuesta #1 en: Mayo 10, 2011, 04:55:52 am »
Código: (MiObjeto.cls) [Seleccionar]
'variables locales para almacenar los valores de las propiedades
Private mvarxLeft As Long 'copia local
Public Property Let Left(ByVal vData As Long)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignación.
'Syntax: X.xLeft = 5
    mvarxLeft = vData
End Property

Public Property Get Left() As Long
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignación.
'Syntax: Debug.Print X.xLeft
    Left = mvarxLeft
End Property

Código: (Module.bas) [Seleccionar]

Private obj As New MiObjeto

Private Sub main()
Set obj = New MiObjeto
obj.Left = 522

Debug.Print obj.Left

Set obj = Nothing
End Sub

proba asi haber si te sirve...

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Re:Problema con clase
« Respuesta #2 en: Mayo 10, 2011, 11:06:56 am »
Gracias me sirvió (El error estaba en que cambiaba la variable vNewValue y al hacer el GET buscaba newValue XD).
Ahora tengo un problemilla con mi clase.
-------------------------------------------------------------------------
Clase-> GameObject

Propiedaddes:
      Top, Left, Width, Height (Funcionan correctamente).

Ahora quiero crear otra propiedad de tipo RECT que se llame Collider.

Código: [Seleccionar]
'**************************************************************
'Clase GameObject
'Propiedades:
'Top, Left, Height, Width, Collider
'**************************************************************
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

'Variables locales para almacenar los valores de las propiedades
Private mvarLeft As Long
Private mvarTop As Long
Private mvarWidth As Long
Private mvarHeight As Long
Private mvarCollider As RECT

Public Property Let Left(ByVal vData As Long)
    mvarxLeft = vData
End Property

Public Property Get Left() As Long
    Left = mvarxLeft
End Property

Public Property Get Top() As Long
    Top = mvarTop
End Property

Public Property Let Top(ByVal vData As Long)
    mvarTop = vData
End Property

Public Property Get Width() As Long
    Width = mvarWidth
End Property

Public Property Let Width(ByVal vData As Long)
    mvarWidth = vData
End Property

Public Property Get Height() As Long
    Height = mvarHeight
End Property

Public Property Let Height(ByVal vData As Long)
    mvarHeight = vData
End Property

Public Property Get Collider() As RECT
    Collider = mvarCollider
End Property

Private Property Let Collider(ByVal vData As RECT)

End Property

Me tira un error:



No me deja meter un RECT como propiedad.
Además quiero que cuando se cambie una de las propiedades del objeto (top, left, width o height) la propiedad Collider se actualice y que el rectangulo ocupe:

collider.top= obj.top
collider.left= obj.left
collider.bottom= obj.top+obj.height
collider.right= obj.left+obj.width

Pero a esto no he conseguido llegar aun porque no puedo usar el RECT como propiedad.
He cambiado la propiedad collider a private pero quiero acceder a ella desde otros modulos y además tampoco me deja.

Alguna idea?

Gracias
« última modificación: Mayo 10, 2011, 11:09:28 am por Juan Luis López »
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

xkiz ™

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 283
  • Reputación: +30/-11
    • Ver Perfil
    • xkiz ™
Re:Problema con clase
« Respuesta #3 en: Mayo 10, 2011, 11:29:35 am »
puede ser que me mande cualkiera, pero fijate si cambiando esto vah
Citar
Private Type RECT
por:
Código: (vb) [Seleccionar]
Public Type RECT
PD: la imagen que pusiste no se ve, osea si uno no eta logeado en ImagesHack no puede visualizar las imagenes hosteadas en sus servidores...