31 agosto 2018

Truco de programación: pantalla de bienvenida persistente en Visual Studio 2015

En estos días de relajación, me he puesto a trastear un poco con Visual Studio 2015. El proyecto se trata de una simulación biológica sencilla denominada "Células y el Origen de la Vida". Hablaré más de ella en esta bitácora, pero hoy quiero tratar un tema puramente técnico.

Visual Basic 2015, y supongo que el resto de lenguajes de programación de esta "suite", incluye una serie de formularios particulares, que no había en la versión que usaba anteriormente, la 2005. Un ejemplo es la Pantalla de Presentación, que es un formulario que en las propiedades del proyecto se puede definir como pantalla de presentación.

Hay un comportamiento que me gustaba crear en algunas aplicaciones que cree en 2005: tener una pantalla de presentación que duraba un tiempo en pantalla hasta que desaparecía y se abría la ventana principal del programa. En la versión antigua, lo lograba trasteando en "Sub main": abría la ventana de presentación con un temporizador, tras lo cual se cerraba. En "Sub main" interrumpía la ejecución ese mismo tiempo y cuando ese tiempo transcurría, abría la ventana principal.

Pero en Visual Studio 2015 quise hacerlo sin hacer tantas "trampas", configurando adecuadamente las propiedades. No hay forma de conseguirlo de manera sencilla: la pantalla de presentación se mantiene abierta y a la vez se abre la principal, sin que hallase forma alguna de replicar el comportamiento anterior.

Esta es la solución que hallé. Primero, utilizaré el comando "Sleep" para paralizar la ejecución del código así:

System.Threading.Thread.Sleep(TESPINI) 

Visual Studio 2015 permite quitar "System". TESPINI es una constante que he definido en un módulo de constantes y declaraciones globales, de la siguiente manera:

Public Const TESPINI As Integer= 5000


El parámetro de Sleep da el tiempo de interrupción en milisegundos. Los siguientes pasos consisten en incluir la invocación a Sleep en ApplicationDesigner.vb


y añadir una línea en ApplicationEvents.vb


Hecho esto, el programa mostrará la ventana de inicio durante 5 segundos, tras los cuales, se cerrará la ventana inicial y se abrirá el formulario MDI.

Puede ser que si se cambia alguna parte sensible de la configuración se pudiera perder código, pero, hasta el momento, a mí no me ha pasado. EDITO: Sí me ha pasado. Recomiendo que antes de distribuir la aplicación os aseguréis de que en ApplicationDesigner.vb está incluido Threading.Thread.Sleep(TESPINI) 

No hay comentarios: