2012-01-24 21 views
7

Ho una schermata iniziale sull'applicazione e su tale modulo. Ho un timer.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 

intervallo del timer è impostato su 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 

Ho impostato breakpoint qui, ma non sembra colpire questo punto di interruzione. Ho decomposto Me.Refresh()

La schermata di avvio si sta chiudendo. Quindi Login viene visualizzato con un pulsante Continua. Quando si fa clic continuare pulsante

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 

Nessuna finestra si presenta e l'applicazione è appeso. Qualsiasi input sarà molto apprezzato.

+0

C'è un motivo per evitare il modulo incorporato di SplashScreen? – LarsTech

+0

Questo è lo stato corrente dell'applicazione. Posso suggerire di utilizzare il modello incorporato. – kalls

+0

@LarsTech - È il modello incorporato. – kalls

risposta

13

Io suggerirei di usare il costruito nel Splash Screen che viene fornito da Visual Studio:

Vai al menu "Progetti" e selezionare "Aggiungi Windows Form" e selezionare il modello Splash Screen:

enter image description here

Poi nelle impostazioni di applicazione del progetto, selezionare il modulo per essere la schermata di avvio:

enter image description here

Il modulo di avvio deve essere il modulo di accesso, non il modulo della schermata iniziale.

Aggiornamento:

Fare clic sul pulsante "Visualizza Application Events" sulla ultima immagine dalla schermata Applicazione del mio progetto e aggiungere questo codice per impostare il valore 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 

tuo spruzzi lo schermo rimarrà sullo schermo per 5000 millisecondi o 5 secondi.

+0

È il modello incorporato. – kalls

+0

@kalls Ho aggiornato la risposta con un esempio per aggiungere un ritardo per la schermata iniziale. Non è necessario il timer. – LarsTech

3

Provare ad aggiungere un modulo al programma con un metodo Public Sub Main. Imposta le opzioni di avvio del progetto su Sub Main. È quindi possibile fare qualcosa di simile:

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 

Impostazioni del progetto:

+0

Non ho provato questo signor Hall. L'approccio precedente ha funzionato per me. Apprezzo la tua risposta. – kalls

0

Quello che ho trovato è che gli eventi timer non vengono sparati fino a quando l'evento Load/metodo è completato. Ho inserito un thread.sleep nell'evento/metodo attivato e mi dà il risultato desiderato. Quindi sto cercando di mostrare una schermata iniziale con un paio di immagini di sfondo diverse e questo funziona bene.

Problemi correlati