Código se ejecuta en tiempo de diseño.

29/03/2006 - 00:09 por José Miguel Torres | Informe spam
Hola, tengo dos formas contenidas dentro de una dll, pero me está pasando
algo muy curioso (bueno curioso para mi que no se mucho de .net), en la dll
llamada CustomForms tengo una forma llamada frmDetalle en el Load del form
tengo este código:

private void frmDetalle_Load(object sender, System.EventArgs e)
{
this.Text=lblTitulo.Text;
validarModo();
cuentaParametros();
}

El código de validarModo es:
private void validarModo()
{
switch(modo)
{
case 0://SELECT
desactivarControles();
ejecutaSelect();
break;
case 1://INSERT
break;
case 2://UPDATE
ejecutaSelect();
break;
case 3://DELETE
desactivarControles();
ejecutaSelect();
break;
}
}

Mi problema lo empecé a tener cuando implemente ejecutaSelect(), cuyo código
actual es este:
private void ejecutaSelect()
{
MessageBox.Show("Mi perro se llama pepe");
}//FIN ejecutaSelect

Si yo compilo esta dll compila bien.
Cuando yo en el proyecto heredo un form de este (frmDetalle en la dll) y en
el proyecto abró la forma inmediatamente en el ambiente de desarrollo de
punto net lo primero que hace la es desplegarme un messagebox que dice "Mi
perro se llama pepe". Uso el messagebox para omitir todo el código pero lo
que sucede es que es esta procedimiento ejecuto código que requiere una
variable pública que es inicializada en el form que llama a este otro por lo
que su valor no está seteado, así que como este procedimiento se está
ejecutando en el compilador en lu gar de darme el nombre de mi perro con el
código real lo que sucede es que el form no se vé y aparece el mensaje
"Object reference not set to an instance of an object", apesar de que en
diseño en lugar del form aparece en blanco con un error, el proyecto compila
y corre perfectamente, si coloco un try y el catch lo dejo vacio el problema
se "soluciona" pero me parece muy feo dejarlo así, ¿por que este código es
interpretado en el compilador y como puedo solucionar esteo?
Gracias.

Preguntas similare

Leer las respuestas

#1 Guillermo guille
29/03/2006 - 02:57 | Informe spam
Me imagino que ese valor que debes asignar en ejecución es el de la variable
"modo", si es así, asignale un valor distinto a los que usas en el switch,
(por ejemplo -1), de esa forma no se ejecutará la primera condición de si
vale CERO, que es lo que seguramente se ejecutará al heredar el formulario
en tiempo de diseño.

Lo del ty/catch que comentas es la "solución fácil", pero algunas veces...
aunque quede "feo", si funciona, pues... a usarlo... je, je.
Si no lo solucionas, siempre te queda ese recurso...

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

"José Miguel Torres" escribió en
el mensaje news:
Hola, tengo dos formas contenidas dentro de una dll, pero me está pasando
algo muy curioso (bueno curioso para mi que no se mucho de .net), en la
dll
llamada CustomForms tengo una forma llamada frmDetalle en el Load del form
tengo este código:

private void frmDetalle_Load(object sender, System.EventArgs e)
{
this.Text=lblTitulo.Text;
validarModo();
cuentaParametros();
}

El código de validarModo es:
private void validarModo()
{
switch(modo)
{
case 0://SELECT
desactivarControles();
ejecutaSelect();
break;
case 1://INSERT
break;
case 2://UPDATE
ejecutaSelect();
break;
case 3://DELETE
desactivarControles();
ejecutaSelect();
break;
}
}

Mi problema lo empecé a tener cuando implemente ejecutaSelect(), cuyo
código
actual es este:
private void ejecutaSelect()
{
MessageBox.Show("Mi perro se llama pepe");
}//FIN ejecutaSelect

Si yo compilo esta dll compila bien.
Cuando yo en el proyecto heredo un form de este (frmDetalle en la dll) y
en
el proyecto abró la forma inmediatamente en el ambiente de desarrollo de
punto net lo primero que hace la es desplegarme un messagebox que dice "Mi
perro se llama pepe". Uso el messagebox para omitir todo el código pero lo
que sucede es que es esta procedimiento ejecuto código que requiere una
variable pública que es inicializada en el form que llama a este otro por
lo
que su valor no está seteado, así que como este procedimiento se está
ejecutando en el compilador en lu gar de darme el nombre de mi perro con
el
código real lo que sucede es que el form no se vé y aparece el mensaje
"Object reference not set to an instance of an object", apesar de que en
diseño en lugar del form aparece en blanco con un error, el proyecto
compila
y corre perfectamente, si coloco un try y el catch lo dejo vacio el
problema
se "soluciona" pero me parece muy feo dejarlo así, ¿por que este código es
interpretado en el compilador y como puedo solucionar esteo?
Gracias.
Respuesta Responder a este mensaje
#2 solusoft
29/03/2006 - 10:55 | Informe spam
Según he visto, el diseñador de VS 2003 instancia en tiempo de diseño un
objeto de la clase Form que tengas, y se ejecuta todo el código del
constructor y también el evento Load he visto.

Hay una propiedad DesignMode del Form, que te indica si estás en tiempo de
diseño, la puedes utilizar en el Load, creo que en el constructor no funciona
bien.

Con los formularios y herencias el VS da problemas, ahora han sacado un
Service Pack para el framework 1.1, alguien sabe algo ?

Otra cosa que no va bien es intentar abrir en diseño un formulario que
herede de un formulario abstracto...

A mi me pasaba también que al heredar de un formulario, los botones
heredados desaparecían o los paneles, y cosas así.


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