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
 

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#

Preguntas similares