Definstance para todos los Windows Forms

09/06/2006 - 12:10 por moondance | Informe spam
Estoy desarrollando en C# 2.0 una aplicación con varios formularios.
Uso la propiedad definstance añadida en cada uno de ellos (ver otros
temas del grupo). El problema es que tengo que añadirla formulario por
formulario, con lo que ello conlleva. Me gustaría saber como puedo
hacer para crear una propiedad genérica y no tener que repetir el
código en cada formulario. Con Generics, quizás se podría, pero no
veo como...

Gracias

Preguntas similare

Leer las respuestas

#1 moondance
12/06/2006 - 10:00 | Informe spam
Bueno, he probado a extender la funcionalidad de Windows Forms, pero me
pasa como con la herencia visual, es decir, muestra el formulario base,
y no el heredado con sus controles. El código es el siguiente:

public class NForm : Form
{
private static NForm m_FormDefInstance;
private static bool m_InicializandoDefInstance;
public static NForm DefInstance
{
get
{
if (m_FormDefInstance == null ||
m_FormDefInstance.IsDisposed)
{
m_InicializandoDefInstance = true;
m_FormDefInstance = new NForm();
}
return m_FormDefInstance;
}
set
{
m_FormDefInstance = value;
}
}
}


Si yo creo mis formularios a partir de aquí heredando de NForm, al
mostrar su instancia por defecto, como comentaba, me muestra el
formulario base NForm que a su vez hereda de Form. ¿Qué estoy
haciendo mal?
Vyacheslav Popov wrote:
> Si no te he entendido mal, se trata de agrupar todos los formularios en
> una clase contenedora o en una coleccion, no?. Eso lo había pensado ya, y
> creo que es la solución menos mala, aunque pensaba en algún tipo de
> propiedad genérica. Otra opción es crear una clase nueva que herede de
> Windows.Forms, pero el problema viene a la hora de usar el diseñador del
> IDE, puesto que tendría problemas con casi total seguridad.

Creo que tienes razón, es mejor extender la funcionalidad a Windows.Form.
El diseñador del IDE no da ningún problema, al menos en los formularios
Windows.
Respuesta Responder a este mensaje
#2 Vyacheslav Popov
12/06/2006 - 17:53 | Informe spam
Lo que estas haciendo mal es herederar de NForm. Cuando pides la instancia
de la forma heredada siempre te devolverá la instancia de NForm y no
OtroForm extendido de NForm...

La solución es implementar el método DefInstance para cada una de tus
formularios (singleton).

Otra solución rebuscada es crear una "factoria-proxy" que te propuse en el
mensaje anterior. De este modo tendrás más control sobre los formularios de
instancia única o de instancias múltiples.

Saludos.

escribió en el mensaje
news:
Bueno, he probado a extender la funcionalidad de Windows Forms, pero me
pasa como con la herencia visual, es decir, muestra el formulario base,
y no el heredado con sus controles. El código es el siguiente:

public class NForm : Form
{
private static NForm m_FormDefInstance;
private static bool m_InicializandoDefInstance;
public static NForm DefInstance
{
get
{
if (m_FormDefInstance == null ||
m_FormDefInstance.IsDisposed)
{
m_InicializandoDefInstance = true;
m_FormDefInstance = new NForm();
}
return m_FormDefInstance;
}
set
{
m_FormDefInstance = value;
}
}
}


Si yo creo mis formularios a partir de aquí heredando de NForm, al
mostrar su instancia por defecto, como comentaba, me muestra el
formulario base NForm que a su vez hereda de Form. ¿Qué estoy
haciendo mal?
Vyacheslav Popov wrote:
> Si no te he entendido mal, se trata de agrupar todos los formularios en
> una clase contenedora o en una coleccion, no?. Eso lo había pensado ya,
> y
> creo que es la solución menos mala, aunque pensaba en algún tipo de
> propiedad genérica. Otra opción es crear una clase nueva que herede de
> Windows.Forms, pero el problema viene a la hora de usar el diseñador del
> IDE, puesto que tendría problemas con casi total seguridad.

Creo que tienes razón, es mejor extender la funcionalidad a Windows.Form.
El diseñador del IDE no da ningún problema, al menos en los formularios
Windows.
Respuesta Responder a este mensaje
#3 moondance
12/06/2006 - 18:12 | Informe spam
Implementar singleton para cada formulario es lo que quiero evitar o al
menos simplificar. Hace no mucho he heredado una aplicación de un
compañero que tenía cerca de 100 formularios. Tuve que ir uno por uno
implementando la propiedad. Buscaba algo que me permitiera hacer una
especie de propiedad genérica para todas las clases que hereden de
Form. Lo de la factoría proxy es otra forma de hacerlo, pero no me va
a evitar tener que pegar el código tantas veces como formularios haya.

De todas maneras, no es algo imprescindible, solo que si me parecería
una solución elegante al tema.

Vyacheslav Popov wrote:
Lo que estas haciendo mal es herederar de NForm. Cuando pides la instancia
de la forma heredada siempre te devolverá la instancia de NForm y no
OtroForm extendido de NForm...

La solución es implementar el método DefInstance para cada una de tus
formularios (singleton).

Otra solución rebuscada es crear una "factoria-proxy" que te propuse en el
mensaje anterior. De este modo tendrás más control sobre los formularios de
instancia única o de instancias múltiples.

Saludos.

escribió en el mensaje
news:
Bueno, he probado a extender la funcionalidad de Windows Forms, pero me
pasa como con la herencia visual, es decir, muestra el formulario base,
y no el heredado con sus controles. El código es el siguiente:

public class NForm : Form
{
private static NForm m_FormDefInstance;
private static bool m_InicializandoDefInstance;
public static NForm DefInstance
{
get
{
if (m_FormDefInstance == null ||
m_FormDefInstance.IsDisposed)
{
m_InicializandoDefInstance = true;
m_FormDefInstance = new NForm();
}
return m_FormDefInstance;
}
set
{
m_FormDefInstance = value;
}
}
}


Si yo creo mis formularios a partir de aquí heredando de NForm, al
mostrar su instancia por defecto, como comentaba, me muestra el
formulario base NForm que a su vez hereda de Form. ¿Qué estoy
haciendo mal?
Vyacheslav Popov wrote:
> > Si no te he entendido mal, se trata de agrupar todos los formularios en
> > una clase contenedora o en una coleccion, no?. Eso lo había pensado ya,
> > y
> > creo que es la solución menos mala, aunque pensaba en algún tipo de
> > propiedad genérica. Otra opción es crear una clase nueva que herede de
> > Windows.Forms, pero el problema viene a la hora de usar el diseñador del
> > IDE, puesto que tendría problemas con casi total seguridad.
>
> Creo que tienes razón, es mejor extender la funcionalidad a Windows.Form.
> El diseñador del IDE no da ningún problema, al menos en los formularios
> Windows.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida