2012-01-24 37 views
7

Tôi có một màn hình giật gân trên ứng dụng và trên biểu mẫu đó. Tôi có một bộ đếm thời gian.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 trên bộ đếm thời gian được thiết lập để 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 

tôi đặt breakpoint ở đây nhưng nó dường như không đạt breakpoint này. Tôi uncommented Me.Refresh()

Màn hình Splash đang đóng. Sau đó, Đăng nhập được hiển thị bằng nút tiếp tục. Khi bạn nhấp vào tiếp tục, hãy nhấp vào nút

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 

Không có cửa sổ nào hiển thị và ứng dụng bị treo. Bất kỳ đầu vào nào sẽ được đánh giá cao.

+0

Có lý do nào để tránh hình thức SplashScreen tích hợp không? – LarsTech

+0

Đây là trạng thái hiện tại của ứng dụng. Tôi có thể đề xuất sử dụng mẫu được tạo sẵn. – kalls

+0

@LarsTech - Đây là mẫu được tạo sẵn. – kalls

Trả lời

13

tôi sẽ đề nghị sử dụng được xây dựng trong màn hình Splash được cung cấp bởi Visual Studio:

Tới menu "dự án" và chọn "Add Windows Form" và chọn Splash Screen mẫu:

enter image description here

Sau đó, trong cài đặt ứng dụng của dự án, chọn hình thức mà là màn hình Splash:

enter image description here

Biểu mẫu khởi động của bạn phải là biểu mẫu đăng nhập của bạn, không phải là biểu mẫu màn hình giật gân.

Cập nhật:

Bấm vào nút "View Application Sự kiện" trên hình ảnh cuối cùng từ màn hình ứng dụng Dự án của tôi và thêm mã này vào thiết lập giá trị 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 

giật gân của bạn màn hình sẽ vẫn còn trên màn hình trong 5000 mili giây hoặc 5 giây.

+0

Đây là mẫu được tạo sẵn. – kalls

+0

@kalls Tôi đã cập nhật câu trả lời bằng ví dụ để thêm độ trễ cho màn hình giật gân. Không cần hẹn giờ. – LarsTech

3

Thử thêm Mô-đun vào chương trình của bạn với phương thức Public Sub Main. Đặt tùy chọn Khởi động dự án của bạn thành Sub Main. Sau đó bạn có thể làm điều gì đó như:

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 

Cài đặt dự án:

+0

Tôi chưa thử ông Hall. Cách tiếp cận trước đó làm việc cho tôi. Tôi đánh giá cao câu trả lời của bạn. – kalls

0

Những gì tôi thấy là sự kiện timer không bị sa thải cho đến khi Load sự kiện/phương pháp được hoàn tất. Tôi đặt một thread.sleep trong sự kiện/phương thức được kích hoạt và nó mang lại cho tôi kết quả mong muốn. Vì vậy, tôi đang cố gắng để hiển thị một màn hình giật gân với một vài hình nền khác nhau và điều này hoạt động tốt.