2012-01-24 15 views
7

Mam ekran powitalny na aplikacji i na tym formularzu. Mam zegar.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 

Interval na zegarze jest ustawiona na 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 

ustawić pułapkę tutaj, ale nie wydaje się, aby uzyskać tę pułapkę. Odkomentowałem Me.Refresh()

Ekran powitalny zamyka się. Następnie Login jest wyświetlany za pomocą przycisku Kontynuuj. Po kliknięciu przycisku kontynuować

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 

Nie pokazuje się okno i aplikacja jest powieszenie. Wszelkie wejścia będą bardzo mile widziane.

+0

Czy istnieje powód, aby unikać wbudowanego formularza SplashScreen? – LarsTech

+0

To jest bieżący stan aplikacji. Mogę zaproponować użycie wbudowanego szablonu. – kalls

+0

@LarsTech - Jest to wbudowany szablon. – kalls

Odpowiedz

13

proponuję za pomocą wbudowanego w ekran powitalny, który jest przewidziany przez Visual Studio:

przejdź do menu „Projekty” i wybierz „Dodaj systemu Windows Form” i wybierz szablon Splash ekranu:

enter image description here

Następnie w ustawieniach aplikacji projektu, wybierz tę formę się ekran powitalny:

enter image description here

Formularz początkowy powinien być formularzem logowania, a nie formularzem ekranu powitalnego.

Aktualizacja:

Kliknij na przycisk „View Application Events” na ostatni obraz z ekranu Aplikacje Twój mój projekt i dodać ten kod, aby ustawić wartość 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 

Twój plusk ekran pozostanie na ekranie przez 5000 milisekund lub 5 sekund.

+0

Jest to wbudowany szablon. – kalls

+0

@kalls Zaktualizowałem odpowiedź, dodając przykład opóźnienia ekranu powitalnego. Nie jest potrzebny zegar. – LarsTech

3

Spróbuj dodać moduł do swojego programu metodą Public Sub Main. Ustaw opcje uruchamiania projektu na Sub Main. Następnie można zrobić coś takiego:

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 

Ustawienia projektu:

+0

Nie próbowałem tego Mr. Hall. Poprzednie podejście zadziałało dla mnie. Doceniam twoją odpowiedź. – kalls

0

Co znalazłem to, że zdarzenia czasowe nie są wypalane aż zdarzenie Load/metoda jest zakończona. Umieściłem thread.sleep w aktywowanym zdarzeniu/metodzie i daje mi pożądany wynik. Próbuję pokazać ekran powitalny z kilkoma różnymi obrazami tła, a to działa dobrze.