Accediendo a variable declarada con eventos (WithEvents)

Iniciado por TrashAmbishion, 18 Octubre 2016, 19:36 PM

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

TrashAmbishion

En el form principal (frmprin) declare

Código (vbnet) [Seleccionar]
Private WithEvents mysocket As ShadowMud.Sockets.AsyncSocket

Necesito acceder a ella desde una clase, no lo declare Shared porque tengo que hacer muchos cambios en Sub que trabajan con el desde el form, por lo que declare otra variable similar pero Shared

Código (vbnet) [Seleccionar]
Private Shared WithEvents samesocket As ShadowMud.Sockets.AsyncSocket

En un Sub

Código (vbnet) [Seleccionar]
Sub X

'Ya mysocket fue inicializado en otro Sub

samesocket = mysocket

End Sub

Desde la clase:

Sub Y

frmprin.samesocket.enviar("lolololo")

End Sub


No creo una varible en la misma clase porque esta lo que guarda es el estado de una conexión TCPIP y necesito utilizar esa misma para enviar datos.

Gracias cualquier ayuda..

Salu2

Eleкtro

#1
Cita de: TrashAmbishion en 18 Octubre 2016, 19:36 PMNecesito acceder a ella desde una clase

Si quieres acceder al miembro "MySocket" desde otra clase distinta a donde declaraste dicho objeto, entonces debes reemplazar la visibilidad "Private" para eliminar la restricción de acceso al miembro declarado a nivel de clase, logicamente.

En su lugar puedes utilizar la visibilidad "Friend", la cual te permitirá acceder a dicho miembro a nivel de ensamblado, es decir, desde cualquier otra clase o módulo que exista dentro de tu proyecto. Ejemplo:

Código (vbnet) [Seleccionar]
Imports ShadowMud.Sockets

Public NotInheritable Class Form1 : Inherits Form

   Friend WithEvents MySocket As AsyncSocket

End Class


Código (vbnet) [Seleccionar]
Imports ShadowMud.Sockets

Public NotInheritable Class Class1

   Private Sub New()
   End Sub

   Public Shared Sub MyMethod()
       Dim sock As AsyncSocket = My.Forms.Form1.MySocket
       ' ...
   End Sub

End Class


También puedes usar la sentencia de visibilidad "Public" en lugar de "Friend", claro está, suponiendo que necesites y/o no te importe que cualquier otra persona pueda acceder al miembro "MySocket" referenciando el ensamblado que estás compilando.

Saludos!