2012-01-24 26 views
7

Tengo una pantalla de bienvenida en la aplicación y en ese formulario. Tengo un cronómetro.Winform Splash Screen - VB.NET - Timer

Private Sub Splash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    SplashTimer.Start() 

    ' Set application title 
    ' Set Version 
Me.Show() 
     'Me.Refresh() 
     'System.Threading.Thread.Sleep(2000) 
     'Login.ShowDialog() 
     'Login.AllowTransparency = True 
    End Sub 

intervalo en el temporizador se establece en 5000.

Private Sub SplashTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SplashTimer.Tick 
     SplashTimer.Stop() 
     Login.Show() 
     Login.AllowTransparency = True 
     Me.Hide() 
    End Sub 

puse punto de interrupción aquí, pero no parece ir a este punto de interrupción. No comenté Me.Refresh()

La pantalla de bienvenida se está cerrando. Luego, el inicio de sesión se muestra con un botón Continuar. Al hacer clic en el botón continuar

MainMenu.Show() 'this form should be shown as this is the main window of the application but it's not showing. 
      Me.Close() 'closes login window 

No se muestra la ventana y la aplicación está colgando. Cualquier entrada será muy apreciada.

+0

¿Hay alguna razón para evitar el formulario SplashScreen integrado? – LarsTech

+0

Este es el estado actual de la aplicación. Puedo sugerir el uso de la plantilla incorporada. – kalls

+0

@LarsTech - Es la plantilla incorporada. – kalls

Respuesta

13

se recomienda usar el construido en la pantalla de bienvenida que se proporciona por Visual Studio:

Ir al menú "Proyectos" y seleccione "Agregar Windows Forms" y seleccione la plantilla de pantalla de bienvenida:

enter image description here

a continuación, en configuración de la aplicación del proyecto, seleccione esa forma a ser la pantalla de bienvenida:

enter image description here

Su formulario de inicio debe ser su formulario de inicio de sesión, no el formulario de pantalla de bienvenida.

Actualización:

Haga clic en el botón "Ver los eventos de aplicaciones" en la última imagen de la pantalla de aplicación de Mi proyecto y agregue el código para establecer el valor MinimumSplashScreenDisplayTime:

Imports System.Collections.ObjectModel 

Namespace My 
    Partial Friend Class MyApplication 
    Protected Overrides Function OnInitialize(commandLineArgs As ReadOnlyCollection(Of String)) As Boolean 
     Me.MinimumSplashScreenDisplayTime = 5000 
     Return MyBase.OnInitialize(commandLineArgs) 
    End Function 
    End Class 
End Namespace 

Su salpicaduras la pantalla permanecerá en la pantalla durante 5000 milisegundos o 5 segundos.

+0

Es la plantilla incorporada. – kalls

+0

@kalls He actualizado la respuesta con un ejemplo para agregar un retraso a la pantalla de inicio. No se necesita temporizador. – LarsTech

3

Intente agregar un módulo a su programa con un método Public Sub Main. Establezca las opciones de inicio de su proyecto en Sub Main. A continuación, puede hacer algo como:

Module Module1 
    Dim frmSplash As SplashScreen1 
    Dim frmLogin As Login 
    Dim frmMain As MainMenu 
    Dim splashTimer As Timer 

    Public Sub Main() 
     splashTimer = New Timer() 
     AddHandler splashTimer.Tick, AddressOf TimerTick 
     splashTimer.Interval = 5000 
     splashTimer.Start() 
     frmSplash = New SplashScreen1 
     frmSplash.ShowDialog() 

     frmLogin = New Login 
     Dim result As DialogResult = frmLogin.ShowDialog 
     If result <> DialogResult.OK Then 
      End 
     End If 

     frmMain = New MainMenu 
     frmMain.ShowDialog() 

    End Sub 
    Private Sub TimerTick(sender As Object, e As EventArgs) 
     splashTimer.Stop() 
     frmSplash.Close() 
    End Sub 
End Module 

Configuración del proyecto:

+0

No he probado este Sr. Hall. El enfoque anterior funcionó para mí. Agradezco tu respuesta – kalls

0

Lo que encontré es que los eventos del temporizador no se disparan hasta que se complete el evento Load/método. Pongo un thread.sleep en el evento/método activado y me da el resultado deseado. Así que estoy tratando de mostrar una pantalla de bienvenida con un par de imágenes de fondo diferentes y esto funciona bien.