Instancia de un Form

14/06/2005 - 14:27 por KIKO | Informe spam
Hola. ¿alguien me dice como puedo saber, antes de crear una instancia de un
formulario si ya la he creado antes? Es para evitar abrir dos veces el mismo
Form.

Gracias.

Kiko

Preguntas similare

Leer las respuestas

#1 José Cordero
14/06/2005 - 14:42 | Informe spam
prueba con Form.ActiveForm, te devuelve la instancia del formulario actual

"KIKO" escribió:

Hola. ¿alguien me dice como puedo saber, antes de crear una instancia de un
formulario si ya la he creado antes? Es para evitar abrir dos veces el mismo
Form.

Gracias.

Kiko



Respuesta Responder a este mensaje
#2 KIKO
14/06/2005 - 15:15 | Informe spam
pero puede ser que no sea el formulario activo y que ya esté abierto. ¿Como
cambio a esa instancia en lugar de crear una nueva?.

Gracias de nuevo.

"José Cordero" escribió en el mensaje
news:
prueba con Form.ActiveForm, te devuelve la instancia del formulario actual

"KIKO" escribió:

Hola. ¿alguien me dice como puedo saber, antes de crear una instancia de
un
formulario si ya la he creado antes? Es para evitar abrir dos veces el
mismo
Form.

Gracias.

Kiko



Respuesta Responder a este mensaje
#3 Víctor
14/06/2005 - 16:35 | Informe spam
Crea una variable estática en la clase del formulario del que quieres saber
si está abierto por ejemplo "static bool myFlag" y una propiedad estática
que devuelva el valor de esta variable. Cuando vayas a crear un objeto no
tienes más que comprobar el valor de la propiedad de la clase. Una vez
destruyasel objeto (cierre del formulario), vuelves a poner a false la
propiedad de la clase. Un ejemplo:

public class Formulario: System.Windows.Forms.Form
{
private static bool myFlag=false;

public Formulario()
{
myFlag=true;
//TODO: ...
}

public static bool IAmOpen
{
get
{
return myFlag;
}
}

protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
myFlag=false;
}

/*
resto de operaciones
*/
}

Cuando vayas a crear el objeto no tendrás más que hacer:

if(!Formulario.IAmOpen)
Form myForm=new Formulario();

Víctor.


"KIKO" escribió en el mensaje
news:u$
pero puede ser que no sea el formulario activo y que ya esté abierto.


¿Como
cambio a esa instancia en lugar de crear una nueva?.

Gracias de nuevo.

"José Cordero" escribió en el


mensaje
news:
> prueba con Form.ActiveForm, te devuelve la instancia del formulario


actual
>
> "KIKO" escribió:
>
>> Hola. ¿alguien me dice como puedo saber, antes de crear una instancia


de
>> un
>> formulario si ya la he creado antes? Es para evitar abrir dos veces el
>> mismo
>> Form.
>>
>> Gracias.
>>
>> Kiko
>>
>>
>>


Respuesta Responder a este mensaje
#4 Tristan
14/06/2005 - 22:08 | Informe spam
Para hacer lo que quieres, debes seguir el patrón singleton.

Basta con que añadas a tu formulario el siguiente código:

class SingletonForm: System.Windows.Forms.Form
{
// ...
private static SingletonForm defInstance;
public static SingletonForm DefInstance
{
get
{
if (defInstance == null || defInstance.IsDisposed)
defInstance = new SingletonForm();
return defInstance;
}
}
}

Después TODOS los accesos a tu instancia única, deben ser realizados de la
siguiente forma:

SingletonForm.DefInstance.Show();
SingletonForm.DefInstance.Text = "Formulario Singleton";
etc...

Observa que no creo una instancia de formulario. La instancia única se
obtiene por la propiedad DefInstance.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#5 KIKO
15/06/2005 - 08:01 | Informe spam
Gracias a todos por vuestra ayuda.
Saludos,

Kiko
"KIKO" escribió en el mensaje
news:
Hola. ¿alguien me dice como puedo saber, antes de crear una instancia de
un formulario si ya la he creado antes? Es para evitar abrir dos veces el
mismo Form.

Gracias.

Kiko

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida