Como trabajar con la misma instancia

04/08/2005 - 20:31 por Instancia Unica de una Forma(Clase) | Informe spam
Hola, mi pregunta es acerca de como puedo utilizar la misma instancia de una
clase(formulario) sin necesidad de crearla como nueva solo utilizarla; es
decir tengo dos formas, la forma A (para mi es la principal) y la forma
B(forma secundaria que recibe y envia parametros a la anterior); la forma B
no resulta problema crearla, ya q solo creo una nueva instancia (con la
palabra reservada new) y listo, sin embargo mi problema es a la inversa, ya q
lo de menos seria crear una nueva instancia también para la forma A, pero,
dicha forma A siempre esta visible, por lo que si creo una nueva lo q sucede
es que ya no estaria trabajando con la primera instancia sino con una segunda
instancia, mi pregunta entonces una vez ampliado un poco la situación, es
como puedo utilizar la misma instancia de un formulario sin necesidad de
crear una nueva, todo esto porque siempre mi forma A debes estar visible(como
si fuera de fondo par la aplicación).

Preguntas similare

Leer las respuestas

#1 Kravek
04/08/2005 - 21:11 | Informe spam
Patrón Singleton...

Añade una variable de tipo TuFormulario a tu Formulario, su constructor
hazlo privado y create un método shared que haga lo siguiente

public shared Constructor() as MiFormulario
begin
if Instancia_ is nothing
Instancia_= new MiFormulario
end
return Instancia_
end

para instanciar siempre el mismo form sólo debes usar dicho método en vez de
un New ;)

"Instancia Unica de una Forma(Clase)" <Instancia Unica de una
Forma(Clase)@discussions.microsoft.com> escribió en el mensaje
news:
Hola, mi pregunta es acerca de como puedo utilizar la misma instancia de
una
clase(formulario) sin necesidad de crearla como nueva solo utilizarla; es
decir tengo dos formas, la forma A (para mi es la principal) y la forma
B(forma secundaria que recibe y envia parametros a la anterior); la forma
B
no resulta problema crearla, ya q solo creo una nueva instancia (con la
palabra reservada new) y listo, sin embargo mi problema es a la inversa,
ya q
lo de menos seria crear una nueva instancia también para la forma A, pero,
dicha forma A siempre esta visible, por lo que si creo una nueva lo q
sucede
es que ya no estaria trabajando con la primera instancia sino con una
segunda
instancia, mi pregunta entonces una vez ampliado un poco la situación, es
como puedo utilizar la misma instancia de un formulario sin necesidad de
crear una nueva, todo esto porque siempre mi forma A debes estar
visible(como
si fuera de fondo par la aplicación).
Respuesta Responder a este mensaje
#2 Tristan
04/08/2005 - 23:44 | Informe spam
Ummm, falta un detalle muy importante en tu código, Kravek. No contempla el
caso en el que el formulario este Disposed (destruido pero no liberado
todavía por el GC). En ese caso, instancia no valdría nothing, pero tampoco
podría utilizarse.

Yo nunca me cansaré de mostrar este enlace. Me parece buenísimo para alguien
que viene de versiones anteriores de vb, por que enseña muchas cosas además,
además del singleton:

http://www.microsoft.com/spanish/ms...eForms.asp

El apartado "¿Cómo trata este problema el Asistente para actualización?"
habla precisamente de eso, si bien se puede simplificar:

Private Shared mDefInstance As Form1
Public ReadOnly Shared Property DefInstance() As Form1
Get
If mDefInstance Is Nothing OrElse mDefInstance.IsDisposed Then
mDefInstance = New Form1()
End If
return mDefInstance
End Get
End Property

Todos los accesos a la instancia única se harán mediante
Form1.DefInstance.Xxx

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
05/08/2005 - 04:32 | Informe spam
De todas formas creo que el diseño no es de lo mejor si el segundo
formulario debe hacer referencia al primero. Existen mejores formas de
comunicarse entre formularios que permiten una mejor encapsulacion y
reutilizacion. Por ejemplo, si lo que devuelve es un solo dato puede hacerse
al estilo de MessageBox. Si son varios datos puenden usarse propiedades para
obtenerlos desde el formulario principal o de necesecitarse una interaccion
mas compleja usar eventos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#4 Tristan
05/08/2005 - 09:19 | Informe spam
Si, realmente no es la forma que yo recomendaría, en general, pero si la más
parecida a vb6. Pero en todo caso, es la mejor forma de trabajar sobre
instancias únicas.

De todas formas, no acabo de comprender a qué te refieres con que no es de
lo mejor si el segundo formulario debe hacer referencia al primero. Si todos
los formularios se obtienen mediante DefInstance, no habría ningún problema
en la comunicación. De hecho es así como vb6 funciona internamente cuando se
trabaja con la instancia predeterminada.

Ahora bien, si te refieres a que como a mí, te gusta reducir el acoplamiento
en la comunicación entre objetos, ahí estamos de acuerdo. Yo siempre
recomiendo acceder de llamador a llamado, trabajando con formularios, y
siempre con un protocolo definido, nunca accediendo directamente a los
controles de otro.

Pero en cualquier caso, esta es la forma de obtener instancias únicas. En
algunos casos, se podría controlar desde el cliente de la clase, pero sin
duda es mucho peor y no siempre es posible.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#5 Eduardo A. Morcillo [MS MVP VB]
05/08/2005 - 16:27 | Informe spam
Ahora bien, si te refieres a que como a mí, te gusta reducir el
acoplamiento en la comunicación entre objetos, ahí estamos de
acuerdo. Yo siempre recomiendo acceder de llamador a llamado,
trabajando con formularios, y siempre con un protocolo definido,
nunca accediendo directamente a los controles de otro.



Me referia exactamente a eso. No tengo ningun problema con el patron
Singleton y es exactamente lo que hay que hacer si se quiere que exista solo
una instancia de la clase. Pero como para solucionar el problema de
comunicacion entre formularios, en mi opinion, no es la soluciona mas
adecuada.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida