MUGPERU
  Search 
Tuesday, January 06, 2009 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Impedir duplicado de ventanas hijas (MDI)
Prev Next
You are not authorized to post a reply.

Author Messages
eleditor
Posts:11

06/01/2007 07:51 AM  

Saludos a todos:
Al llamar desde un menu a un formulario hijo se podrian abrir mas instancias del mismo formulario, en VB uno de los metodos que he usado es en un modulo con una variable publica  'miVariable' iniciad en 0, al llamar al formulario reviso esa variable:

   Si miVariable=0 entonces
      Instancio y muestro la ventana
      miVariable=1
   Fin del si

De esta forma solo se abre la ventana cuando miVariable=0, al cerrar la ventana hija, en el evento Closing:

   miVariable=0

¿Como hago esto en C#?¿Existe otra forma de controlar esto? Gracias de antemano.

rcrbalcazar
Posts:118

07/01/2007 08:33 PM  
Hola, he aqui una solucion, para este ejemplo he usado dos Formularios comunes y silvestres, Form1 y Form2, donde Form1 es el hace la creacion de instancias de Form2 mediante un boton.

1. En formulario que deseas que se controle el instanciamiento a solo una declara las siguientes variables:

// Identifica si ya hay una instancia activa

public static bool HayInstancia = false;

// Identifica a la instancia activa

public static Form2 InstanciaActiva = null;

2. En el evento Load del mismo formulario coloca lo siguiente:

private void Form2_Load(object sender, System.EventArgs e)

{

      HayInstancia = true;

      InstanciaActiva = this;

}


3. Ahora en el formulario o modulo desde el que deseas hacer el instanciamiento coloca lo siguiente (yo estoy usando un Formulario "Form1" y un boton para realizar el instanciamiento):

private void button1_Click(object sender, System.EventArgs e)

{

      if (!Form2.HayInstancia)

      {

            Form2 frmNuevo = new Form2();

            frmNuevo.Show();

      }

      else

      {

            Form2.InstanciaActiva.Activate();

      }

}


Richard Rodriguez
nevermind264
Posts:19

11/01/2007 06:07 AM  
no px metele singlenton o si no en tu formulario MDI metele komo kampos de la klase a kampos del tipo de los formularios y asi normal o si no a lo muxo krea una klase kon kampos statikos y ke estos sean del tipo de los formualrios

pero yo te rekomiendo el singlenton
didi2120
Posts:3

11/01/2007 02:06 PM  
Con singleton se hace esto; declara un campo estatico

public static frmFormUnico Instancia = null;

el constructor lo vuelves privado(para q no lo instancien sino que chiste de hacer esto xD)

private frmFormUnico() { }

una función statica "GetInstance" que retorne la instancia unica y compartida del formulario, y si no existe que la cree

public static frmFormUnico GetInstance()
{
if (Instance == null)
{
Instance = new frmFormUnico();
}
return Instance;
}

y cuando cierras el formulario lo regresas a nothing ... evento FormClosing
private void CierraForm(object sender, FormClosingEventArgs e)
{
if (Instance != null)
{
Instance = null;
}
}

y eso seria todo... suerte xD
You are not authorized to post a reply.
Forums > Lenguajes de Programación > Visual C# > Impedir duplicado de ventanas hijas (MDI)



ActiveForums 3.7
        
Copyright 2001-2008 MUGPERU   Terms Of Use  Privacy Statement