Muy Urgente

24/07/2005 - 13:49 por Ch0rY | Informe spam
Tengo el Juego del Bingo hecho to el en un solo formulario y he decidido
dividirlo en varios (Tablero, Controles, BolaSacada, ...)

el problema es que donde antes tenia

Private Sub ReIniciar()
me.Grabar = False
Automatico.Enabled = False
Call Iniciar()
Call Limpiar()
Call DesColoca_Las_Bolas()
Grabada = False
End Sub

Ahora tengo

Public Shared Sub ReIniciar()
pnl_Tablero.Grabar = False
Automatico.Enabled = False <--
Call Iniciar()
Call Limpiar() <--
Call DesColoca_Las_Bolas() <--
Grabada = False
End Sub


pero en las lineas que marco me da este error:

No se puede hacer referencia a un miembro de instancia de una clase desde
un método compartido o un inicializador de método compartido sin una
instancia explícita de la clase.


Como lo soluciono?

Hace algun tiempo vi, no recuerdo si una web o e este grupo como hacer una
aplicación de este tipo, a base de paneles, lo ha visto alguien mas?
Podriais decirme donde encontrarlo?

Gracias

chory

Preguntas similare

Leer las respuestas

#1 A.Poblacion
24/07/2005 - 14:11 | Informe spam
"Ch0rY" wrote in message
news:
[...]
Public Shared Sub ReIniciar()
[...]
No se puede hacer referencia a un miembro de instancia de una clase desde
un método compartido o un inicializador de método compartido sin una
instancia explícita de la clase.



El problema es que donde antes tenías el método Reiniciar definido como
método de instancia, lo has cambiado a método estático ("compartido" -
shared en VB), pero desde dentro continuas llamando a algunas variables y
métodos que son de instancia y que no has convertido en estáticos. Esto,
lógicamente, da un error (¿a cuál de las instancias llamaría el
procedimiento estático? ¿y qué pasaría si llamases al método estático antes
de haber creado ninguna instancia?)
Respuesta Responder a este mensaje
#2 Ch0rY
24/07/2005 - 14:22 | Informe spam
Osea, que el error esta dentro de la funcion, no en la definicion ni la
llamada a la misma?

"A.Poblacion" wrote in
news:#:

"Ch0rY" wrote in message
news:
[...]
Public Shared Sub ReIniciar()
[...]
No se puede hacer referencia a un miembro de instancia de una clase
desde un método compartido o un inicializador de método compartido
sin una instancia explícita de la clase.



El problema es que donde antes tenías el método Reiniciar definido
como
método de instancia, lo has cambiado a método estático ("compartido" -
shared en VB), pero desde dentro continuas llamando a algunas
variables y métodos que son de instancia y que no has convertido en
estáticos. Esto, lógicamente, da un error (¿a cuál de las instancias
llamaría el procedimiento estático? ¿y qué pasaría si llamases al
método estático antes de haber creado ninguna instancia?)



Respuesta Responder a este mensaje
#3 A.Poblacion
24/07/2005 - 15:41 | Informe spam
"Ch0rY" wrote in message
news:
Osea, que el error esta dentro de la funcion, no en la definicion ni la
llamada a la misma?



El problema es una combinación de lo que está dentro y lo que está fuera.
Fíjate en que donde haces, por ejemplo, "Automatico.Enabled=False", lo que
interpreta el compilador es "Me.Automatico.Enabled=False". Es decir, que
está llamando a la variable "Automatico" que está en la misma instancia
("Me") que la función que hace la llamada. Cuando la función la "sacas" de
la instancia poniéndole "Shared", entonces ya no sabe a cuál de las
múltiples copias de "Automatico" que en teoría se podrían instanciar en
tiempo de ejecución tiene que llamar.
El remedio dependerá de la estructura de tu programa y de qué es lo que
realmente intentas hacer. Si sólo planeas tener una copia de "Automatico",
puedes declararla también como "Shared", y lo mismo con el resto de las
variables y funciones que te daban error dentro de ReIniciar. En cambio, si
tu diseño requiere realmente instanciar múltiples copias de la clase que
contiene estas variables, lo que tendrás que hacer es pasarle a la subrutina
ReIniciar un parámetro que contenga la instancia, y llamar a las variables
de la instancia a través de ese parámetro. Pero si vas a hacer eso, entonces
no tiene mucho sentido declararla "Shared"; para eso es preferible dejarla
como función de instancia (cambiando solamente el Private a Public) e
invocarla desde la variable que contiene la instancia en lugar de pasársela
como parámetro.
Respuesta Responder a este mensaje
#4 Ch0rY
24/07/2005 - 16:03 | Informe spam
ya que el problema reside en el momento de llamar a las funciones, creo que
intentareadceder a ellas mediante propiedades.
Respuesta Responder a este mensaje
#5 Leonardo Azpurua [mvp vb]
24/07/2005 - 16:31 | Informe spam
"Ch0rY" escribió en el mensaje
news:
ya que el problema reside en el momento de llamar a las funciones, creo


que
intentareadceder a ellas mediante propiedades.



Igual solucionas el problema, pero no la causa.

¿Existe alguna razón para que la funcion Reiniciar sea Shared?

Si querías acceder a ella desde fuera, bastaba con declararla Public. Shared
significa que el miembro con ese modificador puede ser accedido directamente
mediante una referencia a la clase (es un método de clase).

Si desde Reiniciar estas accediendo a propiedades (miembros de datos) de la
instancia, entonces Reiniciar no es Shared. Simplemente elimina el atributo,
y dedicate a lo siguiente.

Salud!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida