problemas desde main

07/08/2004 - 15:44 por dps | Informe spam
hola de nuevo, muchas gracias a tristan por aclararme las
cosas en mi pregunta sobre formularios.

estoy con un tema que me trae de cabeza.

tengo una aplicacion casi terminada con unos 20
formularios. tengo un formulario principal que esta
siempre visible y sobre este despliego los demas
formularios.

la aplicacion me genera un error (excepción no controlada
en windows.forms) cada vez que cierro un formulario de la
aplicacion (formulario que he desplegado sobre el
principal con showdialog()), pero no siempre pasa. Me
resultaba imposible determinar donde se producía la
excepcion, parecia algo aleatorio, sin sentido.

esta aplicacion se inicia desde main, donde incluyo
Application.EnableVisualStyles():

Sub main()

Dim frm As System.Windows.Forms.Form
Dim Proceso As Process() = Process.GetProcessesByName
(Process.GetCurrentProcess.ProcessName)

'habilito estilos XP
Application.EnableVisualStyles()

'compruebo otras ejecuciones
If Proceso.GetLength(0) > 1 Then
'fin
Application.Exit()
Else
'inicializo
..

frm = New frmPrincipal

Application.Run(frm)
End If

End Sub


pues bien, me he dado cuenta que si en lugar de iniciar
la aplicacion desde main la inicio desde frmPrincipal no
se producen los errores "misteriosos". el problema es que
para utilizar Application.EnableVisualStyles() tengo que
iniciar desde main o eso tengo entendido.

que os parece esto? os ha pasado algo similar? que estoy
haciendo mal?

muchas gracias a todos

Preguntas similare

Leer las respuestas

#1 Tristan
07/08/2004 - 16:12 | Informe spam
No se si otros descubrirán con esa información lo que te ocurre. A mi me
parece que me faltan datos. En el código que muestras no se aprecia nada
incorrecto. Menos aún algo que pueda producir un error al cerrar los
formularios.

Bueno, yo haría la función de otra manera, pero cambios sin importancia. La
haría así:

En la clase de tu formulario principal (no en un módulo) añade este código.
Establece el formulario como punto inicial:

Public Shared Sub Main()
Dim Proceso As Process() Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)
If Proceso.GetLength(0) = 1 Then
Application.EnableVisualStyles()
Application.Run(New frmPrincipal())
End If
End Sub

Lo que no conozco es el código de los puntos suspensivos, donde dices
inicializo. Esa parte no se ejecutará si comienzas sin Main. ¿Puede haber
algo en ella que afecte al cierre del formulario?.

Por otro lado. ¿Tienes código en el evento Closed de los formularios?.
¿Estás utilizando componentes COM?. También podría ser algún problema
relacionado con los estilos visuales. Supongo que habrás ejecutado paso a
paso para descubrir que sentencia da el error.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#2 Anonimo
07/08/2004 - 16:58 | Informe spam
gracias por tu tiempo, tristan

te comento,

en los puntos suspensivos no tengo nada que pueda causar
ningun error, solo inicializo unas variables

he probado el código que me has propuesto y me ocurre
exactamente lo mismo que me ocurría. continuan las
excepciones al cerrar formularios. increible

el problema esta relacionado con
Application.EnableVisualStyles() ya que si comento esta
línea los problemas desaparecen

es extraño todo esto. imaginate un formulario de captura
de datos de clientes:

- si el usuario selecciona un cliente de una lista,
relleno el formulario con los datos del cliente y lo
muestro .showdialog(). al cerrar el formulario no tengo
ningún problema. el procedimiento para rellenar el
formulario de datos esta en el propio formulario de datos
y lo llamo desde el formulario principal así:

dim frm as newfrmclientes

frm.muestracliente(codcliente)
frm.showdialog()
frm.dispose

- si el usuario selecciona crear un cliente nuevo, el
formulario aparece para capturar los nuevos datos:

dim frm as newfrmclientes

frm.showdialog()
frm.dispose

y en este caso es cuando se produce el error al cerrar el
formulario!


tengo que añadir que el error se produce solamente cuando
el usuario cancela la entrada de datos para un cliente
nuevo. tengo un boton de cerrar que está como
cancelbutton del formulario. si por el contrario, el
usuario ingresa los datos y pulsa aceptar, se guardan los
datos y el formulario se cierra sin problemas.

siempre cierro los formularios con .close()

no le encuentro sentido a lo que está pasando.

para mas inri, he seguido el mismo esquema para los demas
formularios de la aplicacion y con todos ocurre
exactamente lo mismo!

otro dato a tener en cuenta. en el trabajo tengo win2000
y ayer mismo he estado trabajando en la aplicación sin
percatarme del problema. por lo que puedo presumir que
esté no se produce en win2000 (me imagino que ignorará el
Application.EnableVisualStyles())

sin embargo, en casa tengo winxp y aquí es donde aparece
el problema. he probado la aplicación en otro xp del
trabajo y tambien se ha reproducido el problema (descarto
entonces que mi xp tenga algo roto)


tendré que investigar un poco más acerca de
Application.EnableVisualStyles() porque no me cabe duda
que el problema esta ahí.

gracias de nuevo




No se si otros descubrirán con esa información lo que te


ocurre. A mi me
parece que me faltan datos. En el código que muestras no


se aprecia nada
incorrecto. Menos aún algo que pueda producir un error


al cerrar los
formularios.

Bueno, yo haría la función de otra manera, pero cambios


sin importancia. La
haría así:

En la clase de tu formulario principal (no en un módulo)


añade este código.
Establece el formulario como punto inicial:

Public Shared Sub Main()
Dim Proceso As Process() >Process.GetProcessesByName


(Process.GetCurrentProcess.ProcessName)
If Proceso.GetLength(0) = 1 Then
Application.EnableVisualStyles()
Application.Run(New frmPrincipal())
End If
End Sub

Lo que no conozco es el código de los puntos


suspensivos, donde dices
inicializo. Esa parte no se ejecutará si comienzas sin


Main. ¿Puede haber
algo en ella que afecte al cierre del formulario?.

Por otro lado. ¿Tienes código en el evento Closed de los


formularios?.
¿Estás utilizando componentes COM?. También podría ser


algún problema
relacionado con los estilos visuales. Supongo que habrás


ejecutado paso a
paso para descubrir que sentencia da el error.

Juan Carlos Badiola
MVP - C#


.

Respuesta Responder a este mensaje
#3 Anonimo
07/08/2004 - 17:11 | Informe spam
esto es de cag..se!

convencido de que el problema era en
Application.EnableVisualStyles() he buscado un poco de
información al respecto.

buscando en google, la primera entrada es a una página
(http://www.codeproject.com/buglist/...StylesBug.
asp) donde se habla del bug de
Application.EnableVisualStyles())

por lo visto, dicho bug causa que en un formulario con un
imagelist y un toolbar (como es mi caso) las imagenes
desaparecen del toolbar.
yo utilizo un el sandbar.toolbar y no he sufrido el
problema, pero parece que si he sufrido otro con los
formularios.

el problema se resuelve agregando Application.DoEvents
justamente a continuación de
Application.EnableVisualStyles()) :

Application.EnableVisualStyles())
Application.DoEvents()


repito, de cag..se!

he añadido la puñetera linea y todo funciona de maravilla!
por fiiiiinnnnn

esta noche tendre que celebrarlo je je je

muchas gracias por tu tiempo, tristan
un saludo y hasta pronto

valentin












gracias por tu tiempo, tristan

te comento,

en los puntos suspensivos no tengo nada que pueda causar
ningun error, solo inicializo unas variables

he probado el código que me has propuesto y me ocurre
exactamente lo mismo que me ocurría. continuan las
excepciones al cerrar formularios. increible

el problema esta relacionado con
Application.EnableVisualStyles() ya que si comento esta
línea los problemas desaparecen

es extraño todo esto. imaginate un formulario de captura
de datos de clientes:

- si el usuario selecciona un cliente de una lista,
relleno el formulario con los datos del cliente y lo
muestro .showdialog(). al cerrar el formulario no tengo
ningún problema. el procedimiento para rellenar el
formulario de datos esta en el propio formulario de


datos
y lo llamo desde el formulario principal así:

dim frm as newfrmclientes

frm.muestracliente(codcliente)
frm.showdialog()
frm.dispose

- si el usuario selecciona crear un cliente nuevo, el
formulario aparece para capturar los nuevos datos:

dim frm as newfrmclientes

frm.showdialog()
frm.dispose

y en este caso es cuando se produce el error al cerrar


el
formulario!


tengo que añadir que el error se produce solamente


cuando
el usuario cancela la entrada de datos para un cliente
nuevo. tengo un boton de cerrar que está como
cancelbutton del formulario. si por el contrario, el
usuario ingresa los datos y pulsa aceptar, se guardan


los
datos y el formulario se cierra sin problemas.

siempre cierro los formularios con .close()

no le encuentro sentido a lo que está pasando.

para mas inri, he seguido el mismo esquema para los


demas
formularios de la aplicacion y con todos ocurre
exactamente lo mismo!

otro dato a tener en cuenta. en el trabajo tengo win2000
y ayer mismo he estado trabajando en la aplicación sin
percatarme del problema. por lo que puedo presumir que
esté no se produce en win2000 (me imagino que ignorará


el
Application.EnableVisualStyles())

sin embargo, en casa tengo winxp y aquí es donde aparece
el problema. he probado la aplicación en otro xp del
trabajo y tambien se ha reproducido el problema


(descarto
entonces que mi xp tenga algo roto)


tendré que investigar un poco más acerca de
Application.EnableVisualStyles() porque no me cabe duda
que el problema esta ahí.

gracias de nuevo




No se si otros descubrirán con esa información lo que




te
ocurre. A mi me
parece que me faltan datos. En el código que muestras




no
se aprecia nada
incorrecto. Menos aún algo que pueda producir un error


al cerrar los
formularios.

Bueno, yo haría la función de otra manera, pero cambios


sin importancia. La
haría así:

En la clase de tu formulario principal (no en un




módulo)
añade este código.
Establece el formulario como punto inicial:

Public Shared Sub Main()
Dim Proceso As Process() >>Process.GetProcessesByName


(Process.GetCurrentProcess.ProcessName)
If Proceso.GetLength(0) = 1 Then
Application.EnableVisualStyles()
Application.Run(New frmPrincipal())
End If
End Sub

Lo que no conozco es el código de los puntos


suspensivos, donde dices
inicializo. Esa parte no se ejecutará si comienzas sin


Main. ¿Puede haber
algo en ella que afecte al cierre del formulario?.

Por otro lado. ¿Tienes código en el evento Closed de




los
formularios?.
¿Estás utilizando componentes COM?. También podría ser


algún problema
relacionado con los estilos visuales. Supongo que




habrás
ejecutado paso a
paso para descubrir que sentencia da el error.

Juan Carlos Badiola
MVP - C#


.



.

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