Desplegando un Splash Form con VB.NET (2)


NOTA: El presente post, como el anterior, están pensados principalmente para VB.NET 2003 y anterior. Para VB2005 y posterior existe la opción de hacerlo mediante su Modelo de Aplicaciones (aka "My") que comento en el siguiente post Splash Form con VB2005. Pero si aún así desea hacerlo por cuenta propia (no desea utilizar "My" de VB2005+), entonces continúe leyendo.

Si ya tenemos diseñado nuestro Splash Form sólo resta desplegarlo por un breve lapso de tiempo al inicio de la ejecución de la aplicación.

Aunque puede resultar obvio el establecer al Splash Form como el Objeto inicial de la aplicación, y desde el mismo lanzar después el formulario principal con el cual el usuario interactuará con la aplicación, esto no es lo adecuado. El problema es que cuando establecemos el objeto inicial se indica el objeto a partir del cual se inicia el bucle de mensajes de la aplicación, por lo que al destruirse dicho objeto se termina la aplicación. Por lo anterior y otras razones el objeto inicial debe ser el formulario principal y no el Splash Form.

El Splash Form se debe cargar a partir del formulario principal pero procurando mostrarlo antes que el formulario principal. Así pues el mejor lugar para cargarlo es el método del manejador del evento Load del formulario principal -o bien al final del constructor del mismo, después del llamado a InitializeComponent().

Por otro lado debemos controlar el tiempo de despliegue del Splash Form para lo cual existen dos opciones:

  • Con el uso de un componente temporizador (Timer) alojado en el Splash Form.
  • Con el uso de Thread.Sleep desde el formulario principal.

Cualquiera de los dos formas es válida, pero siempre se debe procurar controlar desde formulario principal el tiempo que se despliega el Splash Form. Si se utiliza un Timer dentro del Splash Form el mismo se debe desplegar de manera modal utilizando el método ShowDialog, mientras que el uso de Thread.Sleep nos permite desplegar el Splash Form de manera no modal con el método Show.

Para ejemplificar el despliegue no modal podemos implementar un método privado dentro de clase del formulario principal que se encargará de crear una instancia y mostrar el Splash Form por una determinada cantidad de tiempo (1 segundo):

Private Sub ShowSplash()
    Dim fSplash As New SplashForm
    fSplash.Owner = Me
    fSplash.Show()
    Application.DoEvents()
    Threading.Thread.Sleep(1000)
    fSplash.Close()
    fSplash.Dispose()
End Sub

Por último sólo resta llamar el método anterior al inicio del manejador del evento Load del formulario principal.

Private Sub MainForm_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
    ShowSplash()
    ' más código...
End Sub

Dado que el Splash Form se trata de un formulario no modal podemos modificar el método ShowSplash para que además de desplegarse un lapso de tiempo fijo se despliegue mientras se cargan los recursos necesarios para la aplicación. Para ello basta colocar después de la línea: Threading.Thread.Sleep(1000), y antes del cierre del Splash Form algo cómo:

    CargaRecursos()

La cual sería la llamada al método (a implementar por uno mismo) que se encargaría de la carga de los recursos necesarios para el inicio de la aplicación (datos, archivos, etc…).

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, VB.NET. Guarda el enlace permanente.

15 respuestas a Desplegando un Splash Form con VB.NET (2)

  1. Disculpa, te quisiera hacer una pregunta sobre este artículo. En las propiedades de la aplicación aparece un combobox al lado de “Ver eventos de aplicaciones” en la solapa Aplicación (para vbnet 2005)

    El mismo dice “Pantalla de Bienvenida”, y en el cual no me deja seleccionar el formulario de Inicio. Supongo que acá habrá que setear el splah, verdad?
    Te pregunto esto porque pareciera que visual lo hace automáticamente y lo muestra siempre antes que el principal, lo cual parece como si el programa no corriera muy bien.
    Sin mas, la primera linea que recorre el programa esta en el splash.
    Sin embargo, en “Formulario de Inicio” he seteado yo mi formulario principal.

    ¿como se podría solucionar esto?

    por cierto, el sitio es genial, siempre me ayuda con algo.
    Gracias!!!

    saludos
    alejo

  2. Willy Mejía dijo:

    Hola Alejo:

    Primero una aclaración: Los post “Desplegando un Splash Form con VB.NET” (1 y 2) son para realizarlo “por nuestra cuenta” y pensado para VB.NET 2003 –aunque también sirve para VB2005.

    En tu caso estás utilizando una nueva opción que facilita el hacerlo mediante el “Windows Application Framework” de VB2005 (aka My) el cual brevemente expliqué en el siguiente post: “Splash Form con VB2005“.

    Por lo que efectivamente, la opción “Pantalla de Bienvenida” es para especificar el SplashForm creado a partir de la plantilla que incluye VB2005. El que no te deje seleccionarlo talvez se deba a que no tienes activada la casilla “Habilitar marco de trabajo de la aplicación” en la misma página de propiedades.

    Espero lo soluciones. Te agradeceré el comentario al respecto.

    Saludos,
    Willy Mejía.

  3. X dijo:

    Gracias por la ayuda! =)

  4. Oscar Hernandez dijo:

    Hola bueno probando como novato en VB2005 aparece lo que Alejo Bardelli Mencionaba, esta solapa se utiliza para indicar con que Form deseas cargar la aplicacion, en nuestro caso se deberia cargar con el Form “Main”, o con el formulario base del sistema desarrollado, aplicar el codigo que se menciona en la parte superior en dicho main y funciona de maravilla, probablemente esta solapa aparece bloqueada porque solo has agregado 1 form al sistema, revisa eso a mi me funciono con 2 forms y le indique que me cargara Main, poseia el form del splash y le agregue el codigo que se menciona en esta pagina, muchas gracias ahora solo me falta que se vea como transparencia, eso si no se como hacerlo pero gracias de verdad

  5. Willy Mejía dijo:

    Hola Oscar,

    Lo de la “transparencia” ¿Te refieres al fondo de la imagen? Si es así establece la propiedad TransparencyKey del formulario al valor “exacto” del color de la imagen que deseas se muestre transparente, es decir el color de fondo de la imagen.

    Nota que si el color de fondo no es uniforme (es un degradado, con tonos, tiene distorsiones, etc) no se producirá el efecto deseado.

    Así mismo establece FormBorderStyle a None…

    Saludos,
    Willy Mejía.

  6. goyo dijo:

    Perdona pero en las propiedades de la aplicacion tienes la opcion de decirle a la aplicacion cuál es el formulario de inicio y cual sera el splash aparte de que esto viene dado por public inherits loquesea vamos que es inherits lo que hará que se lanze el splash antes que el formulario de inicio que por cierto para que gane en seguridad la app sería bueno que fuese ismdi

  7. Willy Mejía dijo:

    Como lo dije cinco comentarios más arriba: “Los post ‘Desplegando un Splash Form con VB.NET’ (1 y 2) son para realizarlo ‘por nuestra cuenta’ y pensados para VB.NET 2003…”

    Así pues lo que dices se aplica sólo si utilizas el “Modelo de Aplicaciones de VB2005” (aka “My”) pero no para versiones anteriores -u otros lenguajes .NET en versiones actuales- y del cual comenté en el post “Splash Form con VB2005” https://willyxoft.wordpress.com/2006/08/16/splash-form-con-vb2005/

    Y sí, es mucho más fácil hacerlo de ésa forma, aunque no es obligatorio, por lo que si deseamos hacerlo por nuestra cuenta podemos hacerlo.

    Saludos.

  8. dspjovenes dijo:

    excelente post, gracias por la info, yo trate de hacerlo a la manera de vb2005, pero me generaba errores al correrlo, asi

  9. dspjovenes dijo:

    excelente post, gracias por la info, yo trate de hacerlo a la manera de vb2005, pero me generaba errores al correrlo, asi que me fui por la opcion de vb2003 y funciono perfecto, Gracias

  10. JOSE dijo:

    Muchas gracias por este aporte, es de gran utilidad para crear un proyecto mas armonioso. ademas es facil de aplicar.

  11. JOSE dijo:

    por cierto esto de cargar recursos como se define o como se realiza si me puede ayudar.

    • Willy Mejía dijo:

      En el ejemplo sólo se trata de una llamada a un método personalizado (que uno mismo codifica) en el cual se carga cualquier recurso externo necesario para la aplicación, generalmente son datos (desde una base de datos) junto con su verificación previa, pero puede ser cualquier recurso que tu app necesite/requiera y cuya “carga” haría que la aplicación “tarde” en desplegarse. De hecho es la principal razón de ser de los splash form. Así que si tu app no necesita “cargar” recursos y por ende no tarda en inicializarse, mejor dejala sin splash…

  12. kary dijo:

    muchas gracias por tu aporte

  13. dhPND dijo:

    Muchas gracias, me ha servido de mucho para mi proyecto. Un abrazo.

  14. Ivan dijo:

    Gracias por ese aporte… ya lo implemente en Visual Basic 2008

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s