formulario

27/02/2007 - 08:50 por Enrique Garcia | Informe spam
Hola Grupo,

Tengo esta linea de codigo en una pantalla MDI a la cual llamo a diferentes
pantallas y utilizo unos botones del Mdi para todas:

frmCompras.RealizarGuardar()

Donde frmCompras es un formulario y RealizarGuardar una funcion publica. Mi
duda es como puede acceder sin instanciar la clase frmCompras ni declararla!
me deja acceder a todas las propiedades y metodos! esto es en 2005 framework
2.0.

Eso si cuando intento en el inmediato por ejemplo,sacar el nombre me da
error, lo que no entiendo!! es como no me da error antes o porque razon me
deja compilar!:

?frmCompras.Name.ToString
Reference to a non-shared member requires an object reference.

he notado esto cuando intentaba ver el contenido de un dataset, no estaba
cargado y el grid si lo tenia cargado, en fin a ver que me podeis decir ya
que en 2003 no dejaba hacer esto!

Muchas Gracias.
 

Leer las respuestas

#1 Carlos Gómez
27/02/2007 - 19:26 | Informe spam
On 27 feb, 08:50, "Enrique Garcia" wrote:
Hola Grupo,

Tengo esta linea de codigo en una pantalla MDI a la cual llamo a diferentes
pantallas y utilizo unos botones del Mdi para todas:

frmCompras.RealizarGuardar()

Donde frmCompras es un formulario y RealizarGuardar una funcion publica. Mi
duda es como puede acceder sin instanciar la clase frmCompras ni declararla!
me deja acceder a todas las propiedades y metodos! esto es en 2005 framework
2.0.

Eso si cuando intento en el inmediato por ejemplo,sacar el nombre me da
error, lo que no entiendo!! es como no me da error antes o porque razon me
deja compilar!:

?frmCompras.Name.ToString
Reference to a non-shared member requires an object reference.

he notado esto cuando intentaba ver el contenido de un dataset, no estaba
cargado y el grid si lo tenia cargado, en fin a ver que me podeis decir ya
que en 2003 no dejaba hacer esto!

Muchas Gracias.



Instanciar una clase no es ni más ni menos que crear un objeto y
cargarlo en memoria.
Cuando ejecutas frmCompras.Name.ToString estas haciendo referencia a
la propiedad name del objeto frmCompras, pero ojo DEL OBJETO, la clase
posee la propiedad Name, por eso te aparece en tiempo de diseño y
devuelve un objeto String, al cual puede usar la propiedad ToString de
la clase Object (todas las clases heredan de Object)
Ahora bien, en tiempo de diseño estás accediendo a las propiedades de
la clase. Pero en tiempo de ejecución estás accediendo a las
propiedades del OBJETO, el cual no has creado (New frmCompras), por lo
que te da el error que escribes.

Cuando declaras una clase Shared, lo que ocurre es que aunque tu no lo
hagas, cuando comienza la ejecución del programa una de las cosas que
hace es instanciar la clase (crear el objeto y cargarlo en la pila de
memoria), por eso lo podemos usar como si nada, ahora bien eso tiene
un coste (el tamaño de memoria que ocupa la clase compartida o shared)

Preguntas similares