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.
 

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.

Preguntas similares